我正在通过Eloquent JavaScript Book工作,其中包含以下代码:
function createFunction(){
var local = 100;
return function(){return local;};
}
当我通过调用createFunction()从节点控制台(从命令提示符运行节点)运行它时,我得到[Function]作为返回值。但是,根据这本书我应该得到100。
所以我的两个问题:这是为什么?第二,在节点控制台中运行这些小例子对于测试JS代码是个坏主意吗?
答案 0 :(得分:4)
您需要拨打createFunction()
的回复。
createFunction()();
第一次调用(()
)调用createFunction()
并返回内部函数,第二次调用执行该函数并返回已关闭的local
变量。
只要您了解环境,例如在节点控制台(或任何其他)中运行小例子就可以了。浏览器的控制台通常为eval()
,这可能会产生副作用,例如delete
显然删除变量的方式,而不仅仅是对象属性。
答案 1 :(得分:3)
通过调用100
的返回值得到createFunction
,createFunction()();
本身就是一个函数。
var new_func = createFunction();
new_func();
......或者更清楚......
function createFunction(){
var local = 100;
// v---v-----------------------v return a function from createFunction
return function(){return local;};
}
// v------- the returned function is assigned to the new_func variable
var new_func = createFunction();
// v------- the returned function is invoked
new_func();
{{1}}
答案 2 :(得分:0)
对于那些有类似问题的人,我完全错过了double(),因此调用看起来像createFunction()()。