2

我正在阅读 Eloquent JavaScript Book,其中包含以下代码:

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

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

所以我的两个问题:为什么会这样?其次,在节点控制台中运行这些小示例是不是测试 JS 代码的坏主意?

4

3 回答 3

4

您需要调用 的响应createFunction()

createFunction()();

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

在节点控制台(或任何其他)中运行小示例很好,只要您知道环境,例如浏览器的控制台通常是eval()'d,这会产生副作用,例如如何delete明显删除变量,而不仅仅是对象属性.

于 2012-04-26T00:30:58.187 回答
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();
于 2012-04-26T00:31:13.017 回答
0

对于那些有类似问题的人,我完全错过了双 (),所以调用看起来像 createFunction()()。

于 2012-04-26T00:31:16.943 回答