Possible Duplicate:
JavaScript: var functionName = function() {} vs function functionName() {}
What is the difference between a function expression vs declaration in Javascript?
我知道函数声明和表达式之间的差异,但遇到了涉及函数名称的代码,并想了解运行它时会发生什么:
var abc = function def() {
console.log("Wait! What??");
}
我知道这不是 JavaScript 的一种方式,但只是想知道一些事情:
abc
会发生什么? ?为什么它有效?abc
可以调用但不能def
,为什么?- 它是函数声明还是表达式?
-
def
是undefined
- 为什么?如果应该有的话,有吗 内存泄漏? - 为什么是
abc.prototype
是函数def
?
谢谢
最佳答案
What happens to abc?
它包含一个函数对象。如果您不对其进行任何操作,它将被垃圾收集。
为什么不呢?什么“有效”?Why it works?
abc can be called but not def, why?
这仅在外部是正确的,在 IE 中则不然。见下文。
Is it a function declaration or an expression?
它是一个函数表达式。您可以很容易地看到它,因为它是赋值表达式的一部分;声明始终需要位于(函数或全局代码的)顶层
def is undefined - why?
仅限外部。函数表达式不创建变量。 “def”是name函数的引用,并且在函数内部它也是对函数的引用。例如,这允许递归而不使用任何外部变量。
var abc = function def() {
def === abc; // true
def.name; // "def"
}
abc();
def; // undefined
If it is supposed to be, are there memory leaks?
是的,在 Internet Explorer 中。它根据该代码创建了两个不同的函数。详情参见http://kangax.github.com/nfe/#jscript-bugs
Why is abc.prototype is function def?
事实并非如此。它只是一个对象。也许它在控制台中显示为该名称,因为它属于名为“def”的函数。
关于javascript - 了解 JavaScript 函数表达式与函数声明,但这是什么?命名函数表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14374645/