0

我知道有全局范围,还有可嵌套的功能范围。但是 Javascript 中还有其他类型的作用域或闭包吗?

当我们讨论这个话题时,范围和闭包之间有什么区别?

4

1 回答 1

2

闭包是一堆可见范围。假设您有以下代码:

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函数的引用在调用链中返回时,从btoa并最终分配到f,它带有这个闭包绑定,所以当你调用f(),它将可以访问所有这些范围,即使您似乎是在全局范围内调用函数。如您所见,只涉及两种作用域——全局作用域和函数作用域。主要区别在于全局范围内的变量被定义为全局对象的属性,而函数范围 vars不是任何对象的属性,不能以任何其他方式引用,只能通过名称引用。闭包本身不是作用域,而是作用域的集合。

于 2012-09-22T12:06:31.627 回答