关闭和返回值

时间:2016-12-01 17:22:41

标签: javascript

有人可以解释下面的代码吗?我对这个角色感到困惑 return f();

  1. return f();调用方法f并返回结果吗? (即返回f

  2. return f();会返回一个对象吗?

  3. 如果我将return f();改为f();,则checkscope = undefined

    var scope = "global scope";          // A global variable
    function checkscope() {
        var scope = "local scope";       // A local variable
        function f() { return scope; }   // Return the value in scope here
        return f();
    }
    checkscope()                         // => "local scope"
    

1 个答案:

答案 0 :(得分:1)

这是#1。 return f() 调用 f,然后返回f返回的内容。 f是对checkscope调用的闭包这一事实意味着它可以在该调用的上下文中访问scope,因此f会读取scope的当前值1}},它是"local scope"(一个字符串),并返回该值。

  

return f();会返回一个对象吗?

不,一个字符串(见上文)。

  

如果我将return f();改为f();,则checkscope = undefined

那是因为当你调用一个不以return <value>语句终止的函数时,调用它的结果是值undefined。删除return后,您将删除checkscope的返回值。

这是一个更有趣的版本:

function memo(value) {
    function f() { return "value is '" + value + "'"; }
    return f; // Note! No (), not calling it, returning the function
}
var f1 = memo("hi");
var f2 = memo("there");
f1(); // "value is 'hi'"
f2(); // "value is 'there'"

更进一步,允许f(闭包)在memo调用结束后存在,这使得memo特定调用的上下文保持活动状态,这意味着我们可以使用特定于该上下文的value