可能重复:
JavaScript:var functionName = function(){} vs function functionName(){}
Javascript中的函数表达式与声明有什么区别?
我知道函数声明和表达式之间的区别,但是遇到了涉及函数名称的代码,并且想要了解运行它时会发生什么:
var abc = function def() {
console.log("Wait! What??");
}
Run Code Online (Sandbox Code Playgroud)
我知道这不是JavaScript的一种方式,但只是想知道一些事情:
abc?为什么会这样?abc可以叫但不是def,为什么?def是undefined- 为什么?如果它应该是,是否有内存泄漏?abc.prototype功能def?谢谢
abc怎么了?
它包含一个函数对象.如果你什么都不做,它将被垃圾收集.
为什么会这样?
为什么不?什么"有效"?
可以调用abc而不是def,为什么?
这只适用于外部,而不是IE.见下文.
它是函数声明还是表达式?
它是一个函数表达式.您可以很容易地看到它,因为它是赋值表达式的一部分; 声明总是需要在顶层(函数或全局代码)
def未定义 - 为什么?
只有来自外面.函数表达式不会创建变量."def"是函数的名称,函数内部也是函数的引用.这允许递归,例如不使用任何外部变量.
var abc = function def() {
def === abc; // true
def.name; // "def"
}
abc();
def; // undefined
Run Code Online (Sandbox Code Playgroud)
如果它应该是,是否有内存泄漏?
是的,在Internet Explorer中.它从该代码创建了两个不同的函数.有关详细信息,请参阅http://kangax.github.com/nfe/#jscript-bugs
为什么abc.prototype是函数def?
它不是.这只是一个对象.也许它在您的控制台中以该名称显示,属于名为"def"的函数.
这是一个命名函数expressio n.可能的用途可能是:
var abc = function def() {
def.test = 'Wait!'; //< sort of a static property
console.log(def.test+" What??");
}
Run Code Online (Sandbox Code Playgroud)
但要注意.
| 归档时间: |
|
| 查看次数: |
1453 次 |
| 最近记录: |