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