在Javascript中存在哪些类型的范围是什么?(What types of scope exis

2019-10-30 16:24发布

据我所知,有全球范围内,并且还嵌套功能范围 。 但是否有任何其他类型的Javascript作用域或倒闭?

虽然我们对这个话题,什么是一个范围,一个封闭的区别?

Answer 1:

闭包是可见范围的堆栈。 比方说,你有下面的代码:

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返回函数建立呼叫链,从ba ,并最终赋予f ,它承载这个封闭与它结合,所以当你调用f()将有机会获得所有这些范围,甚至但你似乎在全球范围内调用函数。 正如你看到的,也有只有两种涉及范围的 - 在全球范围和功能范围。 主要的区别是,在全球范围内的变量定义为全局对象的属性,而功能范围瓦尔不是任何对象的属性,不能以任何其他方式而是通过名称引用。 闭包是不是本身就是一个范围,但范围的集合。



文章来源: What types of scope exist in Javascript?