首先我们要搞明白为什么要有“块级作用域绑定”,那是因为原先我们使用var声明变量不管是在全局还是函数内部,最后都会被当做在当前作用域顶部声明的,这就是俗称的“提升”机制。例如下面的示例代码:
<script>
function getValue(condition){
if(condition){
var value = 'blue';
}else {
console.log('false条件' + value); //此处可以访问value值,只是打印的是undefined
}
console.log('函数作用域顶层' + value); //在这里也可以访问value的值,打印的也是undefined
// 所以说条件内部定义的value变量被JavaScript引擎声明成了当前函数作用域最顶层的一个变量
};
getValue(false);
</script>
虽然value的初始化是在condition成立的条件下执行的,但是再其他作用域范围内也是可以访问的,js并不会报错,代码的输出如下: