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

时间:2016-03-25 18:04:26

标签: javascript closures

那是关闭:

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

我将非常感谢答案

1 个答案:

答案 0 :(得分:1)

假设没有其他任何包装你的片段xPlusPlus函数声明在全局范围内,这意味着它创建了附加到全局范围的闭包。

区别在于

  • 第一个案例x位于xPlusPlus范围内
  • 第二个案例x位于全球

这是第一个案例执行对话:

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

var inner = xPlusPlus();
inner();

console.log(x++); :'嗨匿名函数,你知道变量x吗?'

匿名函数:'不,升级一级!'

console.log(x++); :'嗨xPlusPlus函数,您知道变量x吗?'

xPlusPlus功能:'是的,我已经为你准备好了!'

专线console.log(x++); :'酷!让我将x增加一个'

结束

这是第二案例执行对话:

var x = 0;

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

console.log(x++); :'嗨功能xPlusPlus,您知道变量x吗?'

功能xPlusPlus :'不,提升一级,您将进入全球范围!'

console.log(x++); :'嗨global scope函数,您知道变量x吗?'

global scope :'是的,我已经为你准备好了!'

专线console.log(x++); :'酷!让我将x增加一个'

结束