如何在javascript中进行内存中作用域?

时间:2015-12-07 06:11:18

标签: javascript function scope in-memory

我知道词法范围,但是如何在内存中进行范围界定。

var val="a";

var func=function(data){
    this.data=data;
    console.log(val+" "+data); // val will be available because it is global.       
    var bar=function(innerData){
        console.log(innerData+" "+val+" "+data);
    }
    bar("inner");

}
func("outer");

但是如何在内存中定义范围。

1 个答案:

答案 0 :(得分:0)

调用的每个函数都会在调用堆栈中创建一个激活记录,其中包含所有信息(包括该范围可访问的变量的地址),以及在内存中分配/保留所需的插槽。每当函数完成它正在做的任何事情时,激活记录就从堆栈弹出,并通过删除正在创建的所有局部变量释放内存。

具有全局变量的东西是它们被声明在任何特定范围或生命周期之外,因此它们将持续任何文件的程序或实例,并且可以访问调用堆栈中的任何内容。在那里,这样你就可以从你在func下面声明的任何函数中访问val。