在ES6中,建议使用let
和const
来定义变量。引入let
和const
的目的就是创建了块作用域。
在ES5中只有全局作用域和函数作用域,这就导致了很多问题。
比如,用var
定义的变量会出现变量提升的情况:
function t() {
console.log(a); // 变量a提升到函数顶部,输出为undefined
var a = 123;
}
t();
再比如,在for
循环中定义的i
,在循环结束后仍可访问:
for (var i = 0; i < 5; i++) {
console.log('在for循环内i的值为:', i);
}
console.log('循环结束了,i的值为:', i); // 循环结束了,但i仍然可以访问,此时i处于全局作用域内
还有很多类似的或者令人意想不到的情况,这都会让人感到困惑,阻碍项目的开发。所以,对自己好一点,var
能不用就不用,最好是忘了它,只用let
和const
来定义变量。
网友评论