2016-09-06 105 views
0

我寫了一個簡單的函數,它的第一個電話後勾銷本身:爲什麼這個JavaScript表達式評估爲false?

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時,會發生右側操作數的求值,是嗎?我錯過了什麼?

+4

我自己測試過,我得到'true'。 –

+0

好的,我犯了一個錯誤,我編輯了一秒 –

+1

賦值是通過值來完成的,而不是通過引用。 – Oriol

回答

4

我錯過了什麼?

那你fun功能測試變量f,仍然是綁定到功能,您傳遞,而不是變量nullify(其值爲null確實)。

+0

因此,無效函數被忽略,但不是f? –

+0

是的。 'f'不是對'nullify'變量的引用,它是一個單獨的變量,保存對該函數的引用。 – Bergi

+0

@MichałSzydłowski是的。 'f'只是一個副本。 JS通過值傳遞,而不是引用。 – Oriol

相關問題