此代码段位于" Eloquent Javascript"中。第3行是什么意思,功能名称在哪里?另外,在第7行中,尽管wrap1是变量,但wrap1被称为函数。
function wrapValue(n) {
let local = n;
return () => local;
}
let wrap1 = wrapValue(1);
let wrap2 = wrapValue(2);
console.log(wrap1());
console.log(wrap2());

答案 0 :(得分:2)
原因是,该变量被赋值给函数调用wrapValue()
,该函数返回另一个函数。
当您将变量赋值给函数调用的返回函数时,您必须执行该函数,这就是您将变量作为函数调用执行的原因。
这是#FunctionCeption
。
让我给你一个简单的例子:
function one() {
// This function returns another function.
// Note that this is anonymous function doesn't have a name.
return function () {
// This is another function, returned by the first function.
console.log("I am in the second function.");
}
}
// Now when you assign this to a function:
var two = one();
// You are getting the value returned by the one function. That's actually a function.
// So now you are executing the two as a function, because it is a function.
two();
在您的情况下,这是使用私有变量的问题。要使用普通JavaScript制作ES6 JavaScript,请转换它:
function wrapValue(n) {
let local = n;
return function () {
return local;
}
}
let wrap1 = wrapValue(1);
let wrap2 = wrapValue(2);
console.log(wrap1());
console.log(wrap2());
local
由父函数设置。所以它根本不可访问。
答案 1 :(得分:1)
wrapValue
返回作为函数的对象() => local
。这是箭头函数语法(一种匿名函数)。如果您有:
function wrapValue(n){
let local = n;
return function() {
return local;
}
}
因此,当调用let wrap1 = wrapValue(1);
时,该函数返回以下函数:
function() {
return 1
}
因此,在致电wrap1()
时,您会获得1
。
回到你问的问题:
此外,尽管
wrap1
是一个变量,第7行wrap1
如何被称为函数。
wrap1
确实是一个变量,但正如我上面解释的那样它是一个函数。因此,您可以使用括号()
调用它,它将执行
答案 2 :(得分:1)
MDN向您解释:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions
你的第3行:
return () => local;
意思是:
return function () {
return local;
}
答案 3 :(得分:1)
() => local
是使用anonymous function的arrow notation。写function() { return local; }
这些功能是JavaScript中的一等公民。它们是对象,因此它们可以存储在变量中,作为参数传递或由函数返回。
功能:
function wrapValue(n) {
let local = n;
return () => local;
}
返回另一个函数(上面解释的匿名函数() => local
)。
声明:
let wrap1 = wrapValue(1);
使用参数wrapValue()
调用1
,并在wrap1
局部变量中存储wrapValue()
返回的函数。
声明:
console.log(wrap1());
调用存储在变量wrap1
中的函数并打印它返回的值。
我们可以假装wrap1
是函数的名称,直到我们在wrap1
变量中放入其他内容。