作用域
简单来说,如果把代码比作鱼,那作用域就是水。这样来看,作用域就是代码的执行环境。
一般分成两种作用域:
1,全局作用域:全局的执行环境,无非是windows的对象,供内部环境调用。
2,函数作用域:私有作用域,供内部函数代码运行。
这两类作用域本质都是栈内存,所以,作用域也可以说成是,代码执行开辟栈内存。
作用域链
当代码在环境中执行时,会创建变量对象的一个作用域链。内部环境可以通过作用域链访问所有的外部环境,但反之不行
var a=1
function(){
console.log(a) //1 通过作用域链找到了全局变量a
var b=1
}
console.log(b) //undefined 外部无法访问内部
与原型链的异同
这点也是我个人学习中联想到的,原型链是由若干个原型连起来的,变量在使用方法和属性时,会先找到他自己的原型,如果没有,再找上一层,由此形成了链。那么与作用域链有什么异同呢?
1.定义不同
原型链是由变量不断访问原型形成的链;
作用域链是内部环境可以访问外部环境的依托;
2.不可逆性
两者都是不可逆的性质,外部环境不可访问内部环境,a的原型也不可能可逆访问a