首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么变量被调用为函数?

为什么变量被调用为函数?
EN

Stack Overflow用户
提问于 2018-06-08 18:31:41
回答 3查看 70关注 0票数 0

此代码片段位于"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());

EN

回答 3

Stack Overflow用户

发布于 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由父函数设置。所以它是完全不可访问的。

票数 2
EN

Stack Overflow用户

发布于 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;
}
票数 1
EN

Stack Overflow用户

发布于 2018-06-08 19:26:46

() => local是使用arrow notationanonymous 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变量中放入其他东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50758670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档