块级作用域

2018-11-23  本文已影响0人  咖A喱


ES5中没有块级作用域

影响
  1. if内层变量可能覆盖外层变量:

var tmp = new Date();
 
function f(){
  console.log(tmp);
  if(false){
    var tmp = "hello";
  }
}
 
f(); // undefined
  1. for循环的变量会泄露成全局变量
var s = "hello";
for(var i=0;i<s.length;i++){
  console.log(s[i]);
}
 
console.log(i); // 5

ES6中引入let和const命名后有了块级作用域


总结

  1. var命令下没有块级作用域
  1. ES6中的let和const命令有块级作用域

for循环的特别:
设置循环变量的部分是父作用域,循环体内是子作用域

针对ES6 的浏览器有效:

  • 允许在块级作用域内声明函数。
  • 函数声明类似于var,即会提升到全局作用域或函数作用域的头部。
  • 同时,函数声明还会提升到所在的块级作用域的头部。
上一篇 下一篇

猜你喜欢

热点阅读