1.imply global 暗示全局变量: 如果变量未经声明就赋值,此变量就归window(全局对象)所有
a = 10
console.log(window.a) // 10
2.一切声明的变量,全是window的属性:全局范围内,var(let、const不会)一个变量,这个变量归window(全局对象)所有。 let、const和var的区别
var a = 10
console.log(window.a) // 10
函数预编译(函数执行的前一刻)
function fn (a) {
console.log(a)
var a = 123
console.log(a)
function a () {}
console.log(a)
}
fn(1)
// 编译后:
function fn (a) {
var a
function a () {}
console.log(a) // function a () {}
a = 123
console.log(a) // 123
console.log(a) // 123
}
fn(1)
编译过程:
1.创建AO对象(Activation Object :执行期上下文)
AO {
a:
}
2.将变量和形参名作为AO属性名,值为undefined
AO {
a: undefined
}
3.将实参值和形参统一
AO {
a: 1
}
4.在函数体里面找函数声明,值为函数体(如果函数名和变量或形参名相同,会把之前的值覆盖掉, 所以函数是一等公民)
AO {
a: function a() {}
}
全局预编译
1.生成一个GO对象 Global Object(就是window)
2.将变量名作为GO属性名,值为undefined
3.在全局中找函数声明,值为函数体(如果函数名和变量或名相同,会把之前的值覆盖掉, 所以函数是一等公民)
网友评论