一、作用域定义
变量(变量作用域又称上下文)和函数生效(能被访问)的区域。
javascript没有块级作用域”。所谓“块”,就是大括号“{}”中间的语句。比如if语句、for语句。
javascript除了全局作用域之外,只有函数可以创建的作用域。作用域在函数定义时就已经确定了。而不是在函数调用时确定。
var i = 0;
if (i == 0) {
var name = '张三';
}
console.log(name);//张三
for (var j = 0; j < 3; j++) {
console.log(j);//0 1 2
}
console.log(j);//3
二、[[scope]] (域)
每个javascript函数都是一个对象,对象中有些属性我们可以访问,但有些不可以,这些属性仅供javascript引擎存取,[[scope]]就是其中一个。[[scope]]指的就是我们所说的作用域,其中存储了运行期上下文的集合。
三、作用域链
[[scope]]中所存储的执行期上下文对象的集合,这个集合呈链式链接,我们把这种链式链接叫做作用域链。函数每被调用一次,都会产生一个新的执行上下文环境。因为不同的调用可能就会有不同的参数。
网友评论