今天工作中遇到的问题
第一种
foo
var foo = function(){
console.log("foo");
}
第二种
foo
function foo(){
console.log("foo")
}
第三种
foo()
var foo = function(){
console.log("foo")
}
var foo = function(){}和function foo(){}这两者有什么区别?
相同的声明 为什么第一种是undefined 第三种却可以调用?
1st:
例一中,将一个匿名函数赋值给变量的这种创建函数的方式是使用函数表达式。函数表达式和其他表达式一样,在使用之前必须先赋值。所以在
foo
在定义之前是undefined。2nd:
例二中,直接声明了一个函数,直接声明的函数会有一个重要的特征函数声明提升(function declaration hoisting),意味这在执行代码之前会先读取函数声明。所以在函数定义之前使用函数也不会出现未定义的情况。
3rd:
例三中,在通过函数表达式定义的函数之前使用,由于函数表达式的声明不会提升,所以在之前
foo
还不是一个函数。三个例子连续运行就会出现这样,实际情况是@小_秦答案里的。参考:《JavaScript 高级程序设计 第3版》第7章 函数表达式。