在 Javascript 中,函数及变量的声明都将被提升到函数的最顶部,也就是说我们可以先使用后声明。
但函数表达式和变量表达式只是将函数或者变量的声明提升到函数顶部,函数表达式和变量的初始化不会被提升。
var fn = function(){ }
这种叫做函数表达式,必须先定义后使用。 function fn () { }
这种是函数声明,可以先使用后定义,它会对函数的声明进行一个提升。
举个例子:
方法先使用后声明,是没有问题的:
fun();
function fun(){
console.log("hello,www.w3h5.com");
}
那么我们接着看函数表达式:
var fun = function(){
console.log("前端资源网");
}
fun();
以上是没有任何问题的,我们把声明和使用颠倒位置:
fun();
var fun = function () {
console.log("前端资源网");
}
控制台报错:Uncaught TypeError: fun is not a function
和不声明 fun 报错是不一样的,其实 fun 也是一个变量,只不过他是 function () { console.log(“前端资源网”);}
的一个引用,fun 的声明被提升了,但是初始化没有被提升。
再给大家来一个比较有趣的关于提升的例子:
var a = 1;
(function () {
console.log(a);
var a = 2;
console.log(a);
})();
正确答案:
undefined
2
大家可能想的是 1,2 其实这个结果就是变量提升的原因。
参考文档:
var js=function(){}和function js(){}的区别
(adsbygoogle = window.adsbygoogle || []).push({});