我参与了几个不同的项目,我看到了创建jQuery / JavaScript函数的两种不同方法。
第一个:
function testFunction(){
};
第二个:
var testFunction = function (){
};
这些之间有区别吗?
答案 0 :(得分:48)
主要区别在于第一个(函数声明)被提升到声明它的作用域的顶部,而第二个(函数表达式)不是。
这就是你能够在调用之后调用已声明的函数的原因:
testFunction();
function testFunction() {}
你不能用函数表达式做到这一点,因为赋值是就地发生的:
testFunction();
var testFunction = function() {}; //TypeError
还有第三种形式(名为函数表达式):
var testFunction = function myFunc() {};
在这种情况下,标识符myFunc
仅在函数内的范围内,而testFunction
在声明的任何范围内都可用。在版本9以下的IE中, BUT (并且总是存在但是当涉及到Internet Explorer时)myFunc
标识符错误地泄漏到包含范围。当您需要引用调用函数时,命名函数表达式很有用(因为arguments.callee
已弃用)。
另请注意,变量声明也是如此:
console.log(x); //undefined (not TypeError)
var x = 10;
您可以想象JavaScript引擎会像这样解释代码:
var x; //Declaration is hoisted to top of scope, value is `undefined`
console.log(x);
x = 10; //Assignment happens where you expect it to