函数中的null变量是否可以变为空?当f进入函数链F时,它会以某种方式改变它的值?它不再是空的了。
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为空(仅一次) 克
答案 0 :(得分:1)
当调用chainF时,它会进入第一个if和outputs
f为空
,然后将t.f
分配给newF
函数。
之后t.f
在同一个对象上被调用(现在是newF
),因此t.f
不为空。
接下来要做的就是调用g()
,输出
克
可能误解的是,当您声明newF函数时,您也认为代码已执行。事实并非如此,该功能已分配给newF
,并在调用时运行(newF()
或t.f()
)。电话是在这一行完成的:
t
.chainF(function(){console.log('g')})
.f(); // here