这种关闭是否在全球范围内?

吉姆·巴顿

那就是闭包:

function xPlusPlus() {
   var x = 0;
   return function () {
     console.log(x++);
   }
}

var inner = xPlusPlus();
inner();// 0
inner();// 1
inner();// 2

但是,关闭也是吗?

var x = 0;

function xPlusPlus() {
  console.log(x++);
}
xPlusPlus();// 0
xPlusPlus();// 1
xPlusPlus();// 2

我将非常感谢您的回答

奥康尼

假设没有其他包裹代码段xPlusPlus函数声明的内容位于全局范围内,这意味着它将创建附加到全局范围的闭包。

区别在于

  • 第一种情况xxPlusPlus范围内
  • 第二种情况x在全球范围内

这是第一种情况下的执行对话:

function xPlusPlus() {
   var x = 0;
   return function () {
     console.log(x++);
   }
}

var inner = xPlusPlus();
inner();

Lineconsole.log(x++);:“嘿,匿名函数,你知道变量x吗?”

匿名功能:“不,再上一层!”

Lineconsole.log(x++);:“嘿,xPlusPlus函数,你知道变量x吗?”

xPlusPlus功能:“是的,我为您准备!”

线console.log(x++);:“很酷!让我增加x一个

结束


这是第二种情况执行对话:

var x = 0;

function xPlusPlus() {
  console.log(x++);
}
xPlusPlus();

Lineconsole.log(x++);:“嘿,函数xPlusPlus,你知道变量x吗?”

功能xPlusPlus:“不,再上一层楼,您将进入全球范围!”

Lineconsole.log(x++);:“嘿,global scope函数,你知道变量x吗?”

global scope:“是的,我为您准备!”

线console.log(x++);:“很酷!让我增加x一个

结束

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章