js中作用域分为:
全局作用域:
(1)最外层函数和最外层函数外通过var来定义的变量(全局变量、全局函数)
(2)在函数内部不通过var定义的变量也称为全局变量
局部作用域:
局部作用域:
(1)在函数内通过var来定义的变量,以及内部定义的函数
(2)函数的参数具有局部作用域
1、变量对象(variable object)
变量对象的属性由 变量和 函数声明构成。在函数上下文情况下,参数列表也会被加入到变量对象中作为属性。
(注:只有 函数声明会被加入到变量对象中,而 函数表达式则不会)
2、活动对象(activation object)
活动对象由特殊对象 arguments 初始化而成。随后,他被当做变量对象用于变量初始化。
JavaScript上每一个函数执行时,会先在自己创建的AO上找对应属性值。若找不到则往父函数的AO上找,再找不到则再上一层的AO,直到找到大boss:window(全局作用域)。 而这一条形成的“AO链” 就是JavaScript中的作用域链。
示例:
function a(age) {
console.log(age); //ƒ age() {}
var age = 20
console.log(age); //20
function age() {
}
console.log(age); //20
}
a(18);
function a(age) {
console.log(age); //18
var age = function () {
console.log('25');
}
}
a(18);
function a(age) {
console.log(age);//18
var age = function () {
console.log(age);
}
age();//ƒ () {console.log(age); }
}
a(18);