【发布时间】:2012-06-24 04:45:59
【问题描述】:
我曾参与过几个不同的项目,并且看到了两种不同的创建 jQuery/JavaScript 函数的方法。
第一个:
function testFunction(){
};
第二个:
var testFunction = function (){
};
这些有区别吗?
【问题讨论】:
标签: javascript jquery
我曾参与过几个不同的项目,并且看到了两种不同的创建 jQuery/JavaScript 函数的方法。
第一个:
function testFunction(){
};
第二个:
var testFunction = function (){
};
这些有区别吗?
【问题讨论】:
标签: javascript jquery
主要区别是第一个(函数声明)被提升到声明它的范围的顶部,而第二个(函数表达式)不是。 p>
这就是你能够调用一个在你调用它之后已经声明的函数的原因:
testFunction();
function testFunction() {}
你不能用函数表达式来做到这一点,因为赋值发生在原地:
testFunction();
var testFunction = function() {}; //TypeError
还有第三种形式(命名函数表达式):
var testFunction = function myFunc() {};
在这种情况下,标识符myFunc 仅在函数内部的范围内,而testFunction 在它声明的任何范围内都可用。 BUT(在 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
【讨论】:
var testFunction = function (){} 的问题,但不知道为什么。这完全有道理。