let和var变量的思考
刚学JavaScript,纠结全局变量用var 还是 let。
这篇文章[来源于知乎]表示 在定义全局变量时,var 和 let 的作用相同。
那么现在基本遵守ES6规范的前提下,函数变量还是for循环中的变量,我都用的是let。
MDN对let的描述
let
允许你声明一个作用域被限制在块
级中的变量、语句或者表达式。与var
关键字不同的是,var
声明的变量只能是全局或者整个函数块的。var
和let
的不同之处在于后者是在编译时才初始化(见下面)。就像
const
一样,let
不会在全局声明时(在最顶部的范围)创建window
对象的属性。这里可以了解为什么用let。
let
不会在全局声明时(在最顶部的范围)创建window
对象的属性? 啥意思?
解释:
在程序和方法的最顶端,let不像 var 一样,let不会在全局对象里新建一个属性。 位于函数或代码顶部的var声明会给全局对象新增属性, 而let不会。例如:
var x = 'global';
let y = 'global';
console.log(this.x); // "global"
console.log(window.x); // "global"
console.log(this.y); // undefined
console.log(window.y); // undefined
目前我还没怎么用到window对象的属性,所以let的这个限制暂时不影响我对它的使用。
所以,目前我决定都用let定义变量,可以让我写代码时避免一些错误,清晰我的思路。