作用域
全局作用域
var a = 1;
if(true){
var b = 1;
}
console.log(a,b) // 1 1;
向上面这样通过var 关键字申明的变量,称之为全局变量,在任何地方都能访问到这个变量。
在if或for中通过var 关键字申明的变量也是全局变量。
局部作用域
局部作用域通常也称之为函数作用域。
function fun(){
var a = 1;
}
fun();
console.log(a);//报错
向上面这样定义在函数内部的并通过var 关键字申明的变量,称之为局部变量。局部变量只能在函数内部访问,外界无法访问。
隐式全局变量
function fun(){
a = 1;
}
fun();
console.log(a);// 1
向上面这样定义在函数内部但是没有var 关键字申明的你、变量为隐式全局变量。等同于全局变量,在任何地方都能访问到这个变量。
作用域链
Function内置对象的属性:[[scope]]。[[scope]]属性不可读取或修改,包含了一个函数被创建的作用域中对象的集合。这个集合被称为函数的作用域链,它决定了哪些数据能被函数访问。
var a = 1;
function fn (){
var b = 1;
console.log(a);//1
}
console.log(b)//报错
fn();
当函数fn()创建时,它的作用域中存在一个全局变量。
当函数执行时,会创建一个活动对象(AO),当执行完毕后会被销毁。