现在再回过头来看nAdd(第一段代码)。如我们所知,没有关键字var定义的变量默认进入window域,所以nAdd实际为window.nAdd。这就等同于如下代码: 复制代码 代码如下: var nAdd; function f1(){ var n = 999; nAdd = function(){ n += 1; } function f2(){ alert(n); } return function(){ alert(n); }; }
那么根据我们对result的分析,nAdd的执行将影响f1中n的值。 所以有: 复制代码 代码如下: function f1(){ var n = 999; nAdd = function(){ n += 1; } function f2(){ alert(n); } return function(){ alert(n); }; } var result = f1(); result(); nAdd(); result();
这段代码执行最终的输出结果为1000。
再看这种情况: 复制代码 代码如下: function f1(){ var n = 999; nAdd = function(){ n += 1; } function f2(){ alert(n); } return function(){ alert(n); }; }