我写了一个简单的函数,它在第一次调用后自动消失:
var nullify = function(){
nullify = null;
return 1;
};
如果我打电话两次,就像这样:
console.log(nullify());
console.log(nullify);
然后第一个表达式将返回1
,另一个将评估为null
。一切都清楚到了这一点。
但是,如果我在单个表达式中执行此操作并将其包装在函数中:
var fun = function(f){
return f() && !f;
}
然后,出于某种原因:
console.log(fun(nullify));
评估为false
,而我希望它为true
,因为第一个操作数将返回1
而另一个操作数将取消为null
,{{ 1}}。
当true
函数已经调用nullify
时,右手操作数的评估发生了,是吗?我错过了什么?
答案 0 :(得分:4)
我错过了什么?
您的fun
函数正在测试变量f
,它仍然与您传入的函数绑定,而不是变量nullify
(其值为null
确实)。