据我所知,有全球范围内,并且还嵌套功能范围 。 但是否有任何其他类型的Javascript作用域或倒闭?
虽然我们对这个话题,什么是一个范围,一个封闭的区别?
据我所知,有全球范围内,并且还嵌套功能范围 。 但是否有任何其他类型的Javascript作用域或倒闭?
虽然我们对这个话题,什么是一个范围,一个封闭的区别?
闭包是可见范围的堆栈。 比方说,你有下面的代码:
var v1;
function a() {
var v2;
function b() {
var v3;
function c() {
var v4;
}
return c;
}
return b();
}
var f = a();
c
是具有4个可视范围的功能:它自己的范围内(其中v4
定义),则b
功能的范围(其中v3
的定义),将a
函数的范围(其中v2
的定义),以及全球范围内(其中v1
是定义)。 可见范围的这堆是关闭,并且该功能绑定到该关闭。 当参考c
返回函数建立呼叫链,从b
到a
,并最终赋予f
,它承载这个封闭与它结合,所以当你调用f()
将有机会获得所有这些范围,甚至但你似乎在全球范围内调用函数。 正如你看到的,也有只有两种涉及范围的 - 在全球范围和功能范围。 主要的区别是,在全球范围内的变量定义为全局对象的属性,而功能范围瓦尔不是任何对象的属性,不能以任何其他方式而是通过名称引用。 闭包是不是本身就是一个范围,但范围的集合。