【问题标题】:ES6 closure can be called only after I assign it to a variableES6闭包只有在我将它分配给一个变量后才能被调用
【发布时间】:2018-02-17 13:35:11
【问题描述】:

谁能向我解释为什么下面的第一个代码不起作用但第二个代码起作用?

不工作↓↓↓:

let call = () => {
    let secret = "HELLO NOOBS";
    let reveal = () =>  {
        console.log(secret);
    }
    return reveal;
}

call();

正在工作↓↓↓:

let call = () => {
    let secret = "HELLO NOOBS";
    let reveal = () =>  {
        console.log(secret);
    }
    return reveal;
}

let unveil = call();
unveil();

【问题讨论】:

  • 那是因为你的函数返回一个函数...如果你是这样设计的,为什么你期望它在调用外部时运行内部函数?
  • 我真是个白痴
  • @PennyDreadful:我们都做过这样的事情,不要太自责。 :-)

标签: javascript ecmascript-6 closures


【解决方案1】:

call 返回一个函数。在您的第一个示例中,您只需调用call,您永远不会调用它返回的函数。在您的第二个示例中,您正在调用返回的函数,因此自然会有很大的不同。

你也可以不使用变量直接调用返回的函数:

call()();

第一个()调用call;第二个()调用函数call()返回。

现场示例:

let call = () => {
    let secret = "HELLO NOOBS";
    let reveal = () =>  {
        console.log(secret);
    }
    return reveal;
};

call()();

【讨论】:

    【解决方案2】:

    您刚刚返回了带有call() 的函数来执行它,您应该使用call()()。像这样:

    let call = () => {
        let secret = "HELLO NOOBS";
        let reveal = () =>  {
            console.log(secret);
        }
        return reveal;
    }
    
    call()();

    请注意,当您使用不带括号的 => 函数时,它们会隐式返回给定的任何值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-29
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多