2016-09-06 13 views
0

私はその最初の呼び出しの後に自分自身を無効に簡単な関数書かれている:私はこのように、2回それを呼び出す場合なぜこのJavaScript式はfalseに評価されますか?

var nullify = function(){ 
    nullify = null; 
    return 1;  
}; 

を:

console.log(nullify()); 
console.log(nullify); 

その後、第一式は1を返す、となります他はnullと評価されます。すべてこの点まで明確です。

しかし私は、単一の式でそれを行うと機能でそれをラップしている場合:私はそれを期待しながら、

console.log(fun(nullify)); 

falseと評価されます。何らかの理由で、

var fun = function(f){ 
    return f() && !f; 
} 

その後trueとなります。第1オペランドは1を返し、もう1つは、nullの否定としてtrueを返します。

右オペランドの評価は、nullify機能がすでにnullify = nullと呼ばれている場合に発生します。私は何が欠けていますか?

+4

自分でテストしたところ、「真実」を取得しました。 –

+0

私は間違いを犯しました。編集は1秒です –

+1

割り当ては参照ではなく値で行います。 – Oriol

答えて

4

私は何が欠けていますか?あなたのfun関数は(値実際nullを持っている)変数nullify、まだあなたが渡された関数にバインドされている変数fを、ないテストしている

+0

その結果、nullify関数はNULLになりますが、fにはなりません。 –

+0

はい。 'f'は' nullify'変数への参照ではなく、関数への参照を保持する別の変数です。 – Bergi

+0

@MichałSzydłowskiはい。 'f'はちょうどコピーです。 JSは値渡しであり、参照渡しではありません。 – Oriol

関連する問題