js中作用域

52 阅读1分钟

js的作用域有全局作用域、函数作用域、块状作用域。 在es6前只有全局作用域和局部作用域(函数作用域),

全局作用域

在全局使用var定义的变量为全局变量 如

var abc = 1234
abcd = 2345
console.log(abc) //1234


// abc是一个全局对象,但是abcd不是全局变量,而是作为window对象的属性存在的,
// 但是因为window是全局对象,所以看上去它也具备全局属性,拥有全局作用域

函数作用域

在函数内部定义的变量,拥有函数作用域/局部作用域

function test(){
    var a = 3
    return a + 4
}
console.log(test()) // 7 
console.log(a) //a is not defined

如果要访问函数内部的值,可以return或使用闭包

块级作用域(ES6新增)

es6新增的let和const方法,使用这两种声明的变量只在代码块中有效即在{}内生效。

function test(){
    var a = 3
    if (a === 3) {
        let b = 4
        console.log('abc')//abc
    } else {
        console.log('abcd')
    }
    console.log(b)  // b is not defined
    return a + 4
}