var let const

发布时间:2019-08-09 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了var let const脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

letvar

相信有很多前端工程师除了在声明函数时会用function 其余的变量声明一律使用 var, 不过随着浏览器对es6逐渐支持我们应该学着使用 letconst 而不是使用存在诸多弊端的 VAR

var 存在着哪些弊端呢?

  • 没有块级作用域,很容易声明全局变量
  • 变量提升
  • 可以重复声明

典型的面试题

var arr = [];
for (var i = 0; i < 10; i++) {
    arr[i] = function () {
        console.LOG(i);
    }
}

arr[6](); // 期望输出 6 实际输出 10
arr[7](); // 期望输出 7 实际输出 10
arr[8](); // 期望输出 8 实际输出 10

在ES6诞生之前我们的解决方法基本是这样的

var arr = [];
for (var i = 0; i < 10; i++) {
    (function (i) {
        arr[i] = function () {
            console.log(i);
        }
    }(i))
}

arr[6](); // 6
arr[7](); // 7
arr[8](); // 8

ES6诞生以后呢

let arr = [];
for (let i = 0; i < 10; i++) {
    arr[i] = function () {
        console.log(i);
    }
}

arr[6](); // 6
arr[7](); // 7
arr[8](); // 8

是不是简单了很多, 这一切都要归功于let的块级作用域, 这里使用 var 声明的i是全局变量, 当for循环执行完成以后, i的值已经变成了10, 而在 console.log(i) 的时候访问的同样是全局下的 i 因此我们会发现无论执行哪个函数 i 的值都是10;
而使用 let 呢, 因为 let 声明的变量只在 let 命令所在的代码块内有效, 所以每一次循环的i其实都是一个新的变量, 而当执行 console.log(i) 时, js会沿着作用域链首先找到最近的 i 并输出, 因此会输出我们所期望的 i 值.

除了存在块级作用域 相对于 var 不同之处还有

  • 不存在变量提升
console.log(a); // undefined;
var a = 1;

console.log(b); // b is not defined
let b = 2;

这里用 var 声明变量时, 因为存在变量提升, 在声明之前访问该变量会输出 undefined 并不会报错, 而使用 let 声明的变量在声明之前访问则会报错, 这样更符合人的常规逻辑.

  • 暂时性死区
var a = 123;

if (true) {
  a = 'abc'; // a is undefined;
  let a;
}

暂时性死区规定在声明之前就使用这些变量,就会报错。和没有变量提升类似, 这些功能主要是为了减少程序运行时的错误, 使代码更加规范.

  • 不允许重复声明
let c = 2;
let c = 3; // Identifier 'c' has already been declared

同一个作用域内 不允许重复声明同一个变量。

  • 不会成为全局对象(window)的属性
var a = 3;
console.log(window.a); // 3
let b = 4;
console.log(window.b); // undefined;

const

除了 let 有时候我们也许更需要 const

constlet 的唯一区别就是,const 不可以被更改,所以当声明变量的时候,尤其是在声明容易被更改的全局变量的时候,尽量使用 const

脚本宝典总结

以上是脚本宝典为你收集整理的var let const全部内容,希望文章能够帮你解决var let const所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。