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
}