javascript - 函数表达式和声明中局部变量的范围

奥尼奥

在阅读了 SO 和这篇好文章之后,我仍然不太了解局部变量的范围。我还阅读了 Ben Alman 的这篇好文章

function foo(){
  var i=0;
  console.log(++i);
}
foo(); //1
foo(); //1

//##################

var foo = function(){
  var i=0;
  console.log(++i);
};

var x = foo;
x(); //1
x(); //1

//##################

function foo2(){
  var i = 0;
  return function(){
     console.log(++i);
  };
}

var x = foo2();
x(); //1
x(); //2 -- I don't get this

为什么在第三个例子中,我似乎可以有一个单例函数,即使它调用了几次,也可以使用相同的公共内部变量i=0

苏雷什·阿塔

那是因为您多次调用主函数返回内部函数,而主函数(foo2) 仅执行一次。因此没有重置发生,我不断增加。

所以foo2()被调用一次,内部函数调用两次。

var x = foo2();

当你这样做时,我被初始化0并返回一个函数。请注意,您不再接触此函数,而将仅使用返回的函数。

   x();

执行返回函数的那一行,而这只是执行该行

console.log(++i);

x(); 

又一样。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

JavaScript行为-函数表达式与函数声明-区别

Javascript:函数表达式超过函数声明

Javascript匿名函数表达式

(()=> {}),而不是JavaScript函数表达式

javascript函数表达式与类

Javascript函数表达式

如何在Javascript中使用带有函数表达式的变量提升?

函数表达式前面的JavaScript加号

在JavaScript的函数表达式中引用此内容,

Javascript函数表达式用例

“立即调用的函数表达式”中的JavaScript原型

立即调用JavaScript中的函数表达式

匿名函数表达式和命名函数表达式(JavaScript)之间有区别吗?

Javascript Mocha Tests-在函数表达式中测试函数表达式

javascript函数表达式是类似于还是基于s表达式?

具有立即调用的函数的Javascript提升过程:为什么此声明的函数不能在函数表达式之前运行?

在命名计算表达式中声明局部变量

bash:在for表达式中声明局部变量

JavaScript匿名函数立即调用/执行(表达式与声明)

JavaScript 中的匿名函数和函数表达式有什么区别?

使用箭头函数创建Javascript对象与函数表达式

Javascript立即调用函数表达式(IIFE)和函数作用域

JavaScript:给函数赋予与函数表达式相同的名称可以吗?

JavaScript 中的匿名函数和函数表达式有什么区别?

如何使用javascript中的正则表达式提取数组中代数表达式的系数和变量?

Javascript正则表达式会删除多余的数字(如果不在函数表达式中)

函数表达式如何在解析器的Javascript中工作?

在Visual Studio 2015中获取用于JavaScript函数表达式的智能感知

Javascript语法:带参数的立即调用函数表达式(IIFE)