2016-10-13 60 views
0

我尝试了关闭和运行此代码:调用功能,关闭

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

+6

'AddTo就'返回一个函数,所以如果你控制台登录'addTo(4)',你将记录一个需要被调用的函数本身,然后才能从中获得有意义的东西。 –

+1

因为它会变成:'console.log(addTo(2)(4));' – Ultimater

回答

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); 
0

addTo函数返回另一个函数,该函数add

当你x = addTo(2)x值现在是功能add,它可以访问2你传递给addTo值。

当你做console.log(x(4))你做x = addTo(2)后,等于做console.log(addTo(2)(4))这意味着:

  • 调用addTo2作为参数
  • addTo回报add有权访问传递2因到关闭
  • 调用addTo返回的函数(函数add),参数为4
  • 回报passedinner

总和综上所述,它不会与console.log(addTo(4))工作,因为通过addTo返回的值是另一个功能,因此console.log会简单地打印出类似这样Function