2017-05-08 55 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

'變種X ='用於聲明x作爲變量,和'X ='是用來改變其值。 'var'不會被第二次使用,因爲x早已被聲明爲變量。 –

+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