2017-05-08 8 views
-4

誰かがこの例を通って私を歩くことができますか?なぜそれが10を印刷するのですか?私は、私が考える機能面で機能に混乱しているのを見る。 var x =x =の違いは何ですか?私はこのJavascriptを理解できませんか?

var x = 6; 
var y = 4; 
var a = function(b) { 
    return function(c) { 
    return y + b + c; 
    } 
}; 
x = 2; 
y = 5; 
var fn = a(x); 
x = 1; 
y = 3; 
var unknown = 5; 
console.log(fn(unknown)); 
+1

'VAR X ='変数としてXを宣言するために使用され、そして 'X ='その値を変更するために使用されます。 xはすでに変数として宣言されているため、 'var'は2回目は使用されません。 –

+0

これはJavaScriptに関する基本的な例です。プログラミングを学んだ経歴は? – Kramer

+0

このコードはどこで入手できましたか?あなたはそれを書いたか、それは本からですか?それが本のものなら、それはあまり良いコードではありません。関数を返す関数を書く前にもっと練習することをお勧めします。あるいは、コードを小さな断片に分解してみてください。紙の上に、コードが何をしていると思っているのかを書いてください。 –

答えて

1
var x = 6; 
var y = 4; 
var a = function(b) { 
    return function(c) { 
     return y + b + c; 
    } 
}; 
x = 2; 
y = 5; // unnecessary, meant to confuse 
var fn = a(x); // creates a closure, where b equals 2 
x = 1; // unnecessary, meant to confuse 
y = 3; 
var unknown = 5; 
console.log(fn(unknown)); // y=3,b=2,c=5, total = 10 
+0

確かに混乱させるビットはうまくいった。今私はこれがクロージャーと呼ばれていることを知っている、私は少し良い例を理解していると思う – Alex

関連する問題