那是关闭:
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
我将非常感谢答案
答案 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
增加一个'
结束