为什么这个javascript表达式被评估为false?

时间:2016-09-06 16:16:56

标签: javascript null boolean boolean-expression

我写了一个简单的函数,它在第一次调用后自动消失:

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时,右手操作数的评估发生了,是吗?我错过了什么?

1 个答案:

答案 0 :(得分:4)

  

我错过了什么?

您的fun函数正在测试变量f,它仍然与您传入的函数绑定,而不是变量nullify(其值为null确实)。