javascript - 了解 JavaScript 函数表达式与函数声明,但这是什么?命名函数表达式?

标签 javascript oop

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 的一种方式,但只是想知道一些事情:

  1. abc 会发生什么? ?为什么它有效? abc可以调用但不能def ,为什么?
  2. 它是函数声明还是表达式?
  3. defundefined - 为什么?如果应该有的话,有吗 内存泄漏?
  4. 为什么是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/

相关文章:

javascript - 用于 JavaScript 的 getElementById jquery

javascript - 如何将对象添加到 jquery 结果对象?

javascript - 在 NodeJS 中将数据从一个 js 文件同步传递到另一个文件

javascript - 大多数共享主机是否处理 gzip 压缩文件?

javascript - typescript :无法访问继承类构造函数中的成员值

PHP OOP 最佳实践或如何正确编码?

javascript - 管理与react-router react 的加载栏的状态

actionscript-3 - AS3公共(public)变量不会存储值

c# - 怎么调用它?声明一个父类,分配一个子类

javascript - 事件触发对象方法丢失对象