有人可以解释下面的代码吗?我对这个角色感到困惑
return f();
return f();
调用方法f
并返回结果吗? (即返回f
)
return f();
会返回一个对象吗?
如果我将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"
答案 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
。