我尝试了闭包并运行了这段代码:
var addTo = function (passed) {
var add = function(inner){
return passed + inner;
};
return add;
}
var x = addTo(2);
console.log(x(4));

我不明白为什么这个代码仅在我们在console.log中使用var x时才起作用,而不是在console.log中使用(addTo(4));谢谢你的回答!
答案 0 :(得分:0)
解压缩代码。如果我们从
开始var addTo = function (passed) {
var add = function(inner){
return passed + inner;
};
return add;
}
var x = addTo(2);
console.log(x(4));
然后让我们忽略范围并解压缩它:
function actualAdd(passed, inner){
return passed + inner;
};
function addTo(passed) {
return function(x) { return actualAdd(passed, x);
}
var addSomethingTo2 = addTo(2);
// This is a handle for the actualAdd() function,
// in which "passed" is always the value 2.
console.log(addSomethingTo2);
var thisIsSix = addSomethingTo2(4);
// By calling addSomethingTo2(4) we run the calculation
// 2 + 4 and return the result of that: 6
console.log(thisIsSix);
答案 1 :(得分:0)
您的addTo
函数返回另一个函数,函数add
。
执行x = addTo(2)
时,x
的值现在是add
函数,可以访问您传递给2
的值addTo
。
完成console.log(x(4))
后执行x = addTo(2)
时,这等于执行console.log(addTo(2)(4))
,这意味着:
addTo
为参数调用2
addTo
返回add
,因为关闭而有权访问传递的2
addTo
add
(函数4
)返回的函数
passed
和inner
总而言之,它不适用于console.log(addTo(4))
,因为addTo
返回的值是另一个函数,因此console.log
只会打印类似Function