在此之间我们要了解什么是js中的作用域,作用域是指对变量和方法有访问权限的代码空间;
在ES5中有全局作用域和函数作用域,而在ES6中有新增加了块作用域
1、全局作用域
变量声明在函数最外部,在代码中任何地方都可以访问的对象;
2、函数作用域
定义在函数内部的参数和变量,在函数外部是不可见的
3、块作用域
在{}中的代码都属于一个块,在其中的所有变量字{}外部都不可以访问
var a=2
function name() {
if (false) {
var a=4;
}
console.log(a);//undefined
}
name()
//应为变量提升,函数内变量覆盖的外层变量
for (var index = 0; index < 8; index++) {
var element = index;
}
console.log(index,element);//8,7
//在for和if中变量泄露
//而在块作用域中
for (let index = 0; index < 8; index++) {
let element = index;
}
console.log(index);//报错
console.log(element);//报错
//变量只在当前块作用域之间可以被访问,无法被外层访问
var a=2
function name(params) {
if (false) {
let a=4;
}
console.log(a);//2
}
name()
//无变量提升