Node.js与Javascript关闭

时间:2012-04-26 00:29:44

标签: javascript node.js closures

我正在通过Eloquent JavaScript Book工作,其中包含以下代码:

function createFunction(){
  var local = 100;
  return function(){return local;};
}

当我通过调用createFunction()从节点控制台(从命令提示符运行节点)运行它时,我得到[Function]作为返回值。但是,根据这本书我应该得到100。

所以我的两个问题:这是为什么?第二,在节点控制台中运行这些小例子对于测试JS代码是个坏主意吗?

3 个答案:

答案 0 :(得分:4)

您需要拨打createFunction()的回复。

createFunction()();

第一次调用(())调用createFunction()并返回内部函数,第二次调用执行该函数并返回已关闭的local变量。

只要您了解环境,例如在节点控制台(或任何其他)中运行小例子就可以了。浏览器的控制台通常为eval(),这可能会产生副作用,例如delete 显然删除变量的方式,而不仅仅是对象属性。

答案 1 :(得分:3)

通过调用100的返回值得到createFunctioncreateFunction()(); 本身就是一个函数。

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