Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这个javascript表达式的计算结果为false?_Javascript_Null_Boolean_Boolean Expression - Fatal编程技术网

为什么这个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 Yes
f
只是一个副本。JS按值传递,而不是按引用传递。因此,nullify函数被置为null,而不是f?是的
f
不是对
null
变量的引用,它是一个单独的变量,包含对函数的引用。@MichałSzydłowski Yes
f
只是一个副本。JS按值传递,而不是按引用传递。