作用域及作用域链
作用域:在运行代码中的某些特定部分中的变量、函数和对象的可访问性。换句话说,作用域决定了变量或其他一些资源的可见性。
作用域链:内部可以访问外部的变量,但是外部不能访问内部的变量;如果内部有这个变量,优先查找内部,如果内部没有这个变量,就查找外部的。
注意:声明变量时使用什么关键字进行声明,如果没有使用关键字,则会变成全局变量;
(function () {
var a = b = 10
// 相当于 var a = 10, // a是函数内部变量,在外部无法访问
// b = 10 // b是全局变量
})()
// console.log(a) // 报错 a is not defined
console.log(b) // 10
使用var声明,会有变量提升的机制;
function c() {
var b = 1
function a() {
console.log(b) // undefined
var b = 2
console.log(b) //2
}
a()
console.log(b) // 1
}
c()
在a()函数内部,由于有变量b,于是先访问内部,var定义变量b,有变量提升,此时a()函数相当于以下书写方式:
function a() {
var b
console.log(b) // 只定义,为赋值,所以为undefined
var b = 2 // 完成赋值 为 2
console.log(b) // 2
}