,没有块级作用域,通过关键字var声明的变量,无论是在哪里声明的,都会被当成在当前作用域顶部声明的变量,这就是我们常说的提升机制
这会带来一些问题
场景1-函数内层变量可能会覆盖外层变量
var tmp...)作用域
正因为Es5中使用var声明的变量,没有块级作用域,会污染全局变量,如果使用不当,会产生一些达不到自己预期的效果,所以在Es6中就有了块级作用域
块级作用域:用于声明在指定的块的作用域之外无法访问的变量...0; i< 10;i++) {
arrs.push(function() {
console.log(i);
})
}
在这段代码中,变量i被声明为常量,在第一次循环中,i是0,迭代执行成功...,指向一个对象,不可变的只是这个地址,不能把foo指向另一个地址,但对象本身是可变的,所以依然可以为其添加新的属性
07
关于全局块作用域的绑定
当var,和function被用于全局作用域时,它会创建一个新的全局变量对象作为全局对象...(浏览器环境中的window对象),使用var会覆盖一个已经存在的全局变量
let,const和class命令声明的全局变量不属于全局对象的属性,声明的变量不会提升,而且只可以在声明这些变量的代码块中使用