Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js与Javascript闭包_Javascript_Node.js_Closures - Fatal编程技术网

Node.js与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代码来说是个坏主意

我正在阅读这本有说服力的JavaScript书,书中有以下代码:

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