我参与了几个不同的项目,并且看到了两种不同的创建 jQuery/JavaScript 函数的方法。
首先:
function testFunction(){
};
第二:
var testFunction = function (){
};
这些有区别吗?
我参与了几个不同的项目,并且看到了两种不同的创建 jQuery/JavaScript 函数的方法。
首先:
function testFunction(){
};
第二:
var testFunction = function (){
};
这些有区别吗?
主要区别在于第一个(函数声明)被提升到声明它的范围的顶部,而第二个(函数表达式)不是。
这就是您能够调用在调用后已声明的函数的原因:
testFunction();
function testFunction() {}
你不能用函数表达式来做到这一点,因为赋值发生在原地:
testFunction();
var testFunction = function() {}; //TypeError
还有第三种形式(命名函数表达式):
var testFunction = function myFunc() {};
在这种情况下,标识符myFunc
仅在函数内部的范围内,而testFunction
在它声明的任何范围内都可用。但是(并且总是有一个但是当涉及到 Internet Explorer 时)在版本 9 以下的 IE 中,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