为什么这个javascript表达式的计算结果为false?
我编写了一个简单的函数,在第一次调用后将自身置零:为什么这个javascript表达式的计算结果为false?,javascript,null,boolean,boolean-expression,Javascript,Null,Boolean,Boolean Expression,我编写了一个简单的函数,在第一次调用后将自身置零: var nullify = function(){ nullify = null; return 1; }; 如果我叫它两次,像这样: console.log(nullify()); console.log(nullify); 然后,第一个表达式将返回1,而另一个表达式将计算为null。到目前为止,一切都清楚了 但是,如果我在单个表达式中执行此操作,并将其包装到函数中: var fun = function(f){
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
,true
的求反
当nullify
函数已经调用nullify=null
时,右操作数的求值就会发生,对吗?我错过了什么
我错过了什么
您的fun
函数正在测试变量f
,该变量仍然绑定到您传入的函数,而不是变量nullify
(其值确实为null
)
我错过了什么
你的
fun
函数正在测试变量f
,它仍然绑定到你传入的函数,而不是变量null
(它的值确实是null
)我自己测试过,得到true
。好吧,我犯了一个错误,一秒钟我的编辑任务是按值完成的,不是通过引用。经过测试,我得到的返回值为true。在nullify函数中使用的变量是局部变量,而不是全局变量。实际上,您正在创建一个名为nullify的变量的多个实例。我自己测试了它,得到了true
。好吧,我犯了一个错误,一秒钟后,我的editAssignment是通过值完成的,而不是通过引用完成的。经过测试后,我得到了true返回值。在nullify函数中使用的变量是局部变量,而不是全局变量。实际上,您正在创建一个名为nullify的变量的多个实例。因此,nullify函数将为null,而不是f?是的f
不是对null
变量的引用,它是一个单独的变量,包含对函数的引用。@MichałSzydłowski Yesf
只是一个副本。JS按值传递,而不是按引用传递。因此,nullify函数被置为null,而不是f?是的f
不是对null
变量的引用,它是一个单独的变量,包含对函数的引用。@MichałSzydłowski Yesf
只是一个副本。JS按值传递,而不是按引用传递。