【问题标题】:Difference between assigning function to variable or not将函数分配给变量之间的区别
【发布时间】:2012-06-24 04:45:59
【问题描述】:

我曾参与过几个不同的项目,并且看到了两种不同的创建 jQuery/JavaScript 函数的方法。

第一个:

function testFunction(){

};

第二个:

var testFunction = function (){

};

这些有区别吗?

【问题讨论】:

标签: javascript jquery


【解决方案1】:

主要区别是第一个(函数声明)被提升到声明它的范围的顶部,而第二个(函数表达式)不是。 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

【讨论】:

  • +1 知识 我不知道它是如何工作的。我遇到了var testFunction = function (){} 的问题,但不知道为什么。这完全有道理。
  • @ŠimeVidas - 对。我会把它添加进去。
猜你喜欢
  • 1970-01-01
  • 2018-01-16
  • 1970-01-01
  • 2015-06-04
  • 2018-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-27
相关资源
最近更新 更多