我知道词法范围,但是如何在内存中进行范围界定。
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");
但是如何在内存中定义范围。
答案 0 :(得分:0)
调用的每个函数都会在调用堆栈中创建一个激活记录,其中包含所有信息(包括该范围可访问的变量的地址),以及在内存中分配/保留所需的插槽。每当函数完成它正在做的任何事情时,激活记录就从堆栈弹出,并通过删除正在创建的所有局部变量释放内存。
具有全局变量的东西是它们被声明在任何特定范围或生命周期之外,因此它们将持续任何文件的程序或实例,并且可以访问调用堆栈中的任何内容。在那里,这样你就可以从你在func下面声明的任何函数中访问val。