0

函数中的空变量可以变为非空吗?当 f 进入函数 chainF 时,它会以某种方式改变它的值吗?它不再为空。

function TestF(){}

TestF.prototype = {
    i: 0,
    f: null,
    chainF: function(g){
        if(this.f == null)
            console.log('f is null');
        var newF = function(){
            if(this.f == null)
                console.log('f is null');
                g();
        };
    this.f = newF;
    return this;
    }
}

t = new TestF();
t.chainF(function(){console.log('g')}).f();

输出:f 为空(仅一次)g

4

1 回答 1

1

当调用chainF时,它进入第一个if并输出

f 为空

,然后分配t.fnewF函数。

之后在同一个对象上t.f调用(现在是),所以不是空的。接下来要做的是调用,输出newFt.fg()

G

也许误解是当你声明 newF 函数时你也认为代码被执行了。不是,该函数已分配给newF并在调用(newF()t.f())时运行。调用是在这一行完成的:

t
  .chainF(function(){console.log('g')})
  .f();                                   // here
于 2013-09-27T07:55:43.977 回答