调用函数,关闭

时间:2016-10-13 23:26:17

标签: javascript

我尝试了闭包并运行了这段代码:



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));谢谢你的回答!

2 个答案:

答案 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)返回的函数
  • 返回passedinner
  • 的总和

总而言之,它不适用于console.log(addTo(4)),因为addTo返回的值是另一个函数,因此console.log只会打印类似Function