0
function foo() {
    if (arguments.callee.self)
        return arguments.callee.self;
    arguments.callee.self = this;
    //do sth
}

我明白什么时候这样称呼它:

var a = foo();

当 foo 被执行时,arguments.callee 就是 foo 本身。所以它将这个传递给未定义的变量self。下次当另一个函数调用 foo 时,它会返回 this。显然这会起作用。

当它被这样调用时,事情似乎变得更加棘手:

var b = new foo();

我认为 js 引擎会创建另一个 foo 实例并执行其代码。但它似乎将 this 引用传回,因为 self 已经定义,就像 foo 的同一个实例一样。那么“新”在这里实际上做了什么?

4

1 回答 1

3

new调用函数作为构造函数。如果目标函数显式返回一个对象,则该对象将返回而不是刚刚创建的对象。

由于您在非严格模式下运行此代码,因此该函数在第一次调用后显式返回全局对象,因此它不会返回新创建的对象new foo()

于 2012-06-08T06:55:47.707 回答