此代码片段位于"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());
发布于 2018-06-08 18:32:56
原因是,该变量被赋值给一个调用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
由父函数设置。所以它是完全不可访问的。
发布于 2018-06-08 18:57:22
MDN解释了这一点:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions
你的第三行:
return () => local;
意思是:
return function () {
return local;
}
发布于 2018-06-08 19:26:46
() => local
是使用arrow notation的anonymous function。这是一种简短(但不等价)的function() { return local; }
编写方法
这些函数是JavaScript中的一等公民。它们是对象,因此可以存储在变量中,作为参数传递或由函数返回。
函数:
function wrapValue(n) {
let local = n;
return () => local;
}
返回另一个函数(上面解释的匿名函数() => local
)。
声明:
let wrap1 = wrapValue(1);
使用参数1
调用wrapValue()
,并将wrapValue()
返回的函数存储在wrap1
局部变量中。
声明:
console.log(wrap1());
调用存储在变量wrap1
中的函数并打印它返回的值。
我们可以假设wrap1
是函数的名称,直到我们在wrap1
变量中放入其他东西。
https://stackoverflow.com/questions/50758670
复制相似问题