只有在将其分配给变量后才能调用ES6闭包

时间:2018-02-17 13:35:11

标签: javascript ecmascript-6 closures

任何人都可以向我解释为什么下面的第一个代码不起作用,但第二个代码确实有效?

不工作↓↓↓:

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

2 个答案:

答案 0 :(得分:4)

call返回一个函数。在您的第一个示例中,您只需调用call,您就不会调用它返回的函数。在你的第二个例子中,你正在调用返回的函数,这自然是一个很大的区别。

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

call()();

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

直播示例:

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

call()();

答案 1 :(得分:0)

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

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

call()();

请注意,当您使用=>没有括号的函数它们隐含地返回给定的任何值。