Node.js与Javascript闭包
我正在阅读这本有说服力的JavaScript书,书中有以下代码:Node.js与Javascript闭包,javascript,node.js,closures,Javascript,Node.js,Closures,我正在阅读这本有说服力的JavaScript书,书中有以下代码: function createFunction(){ var local = 100; return function(){return local;}; } 当我通过调用createFunction()通过节点控制台(从命令提示符运行节点)运行此命令时,我将[Function]作为返回值。然而,根据这本书,我应该得到100分 我的两个问题是:为什么会这样?其次,在节点控制台中运行这些小示例对于测试JS代码来说是个坏主意
function createFunction(){
var local = 100;
return function(){return local;};
}
当我通过调用createFunction()通过节点控制台(从命令提示符运行节点)运行此命令时,我将[Function]作为返回值。然而,根据这本书,我应该得到100分
我的两个问题是:为什么会这样?其次,在节点控制台中运行这些小示例对于测试JS代码来说是个坏主意吗?您需要调用
createFunction()
的响应
第一次调用(()
)调用createFunction()
并返回内部函数,第二次调用执行该函数并返回关闭的局部变量
在节点控制台(或任何其他控制台)中运行小示例是可以的,只要您了解环境,例如浏览器的控制台通常是eval()
'd,这会产生副作用,例如delete
显然可以删除变量,不仅仅是对象属性。通过调用本身是函数的createFunction
的返回值,可以获得100
createFunction()();
……或者更清楚地说
var new_func = createFunction();
new_func();
对于那些有类似问题的人,我完全错过了double(),因此调用看起来像createFunction()。我以前从未见过这种情况!谢谢你的澄清!史蒂夫,除了我的第二个问题。这是运行这些小示例的最佳方式。我一直在使用node,您能确认这仍然是一种很好的方法吗?老实说,我不确定所有的部分是如何组合在一起的。我的理解是node是从浏览器中剥离出来的JS引擎。
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();