美文网首页
var VS let

var VS let

作者: 叫我小徐 | 来源:发表于2018-08-16 12:15 被阅读0次

本文主要讲解一下varlet在使用上的一些区别。

变量申明提升

var允许变量申明提前;但let不允许(即let必须申明之后才能使用

console.log(num);
var num = 10;
// 输出结果: undefined

console.log(num2);
let num2 = 20;
// 报错

块级作用域

在ES6之前,只有函数存在块级作用域一说(外部无法直接访问函数内部的变量)。在ES6中,由{}号包裹的区域就形成了一个块级作用域,let申明的变量,只在当前{}号内有效。

for(var i = 0; i < 5; i++) {
}
console.log(i);
// 输出结果为:5

for(let j = 0; j < 5; j++) {
}
console.log(j);
// 报错

变量重新申明

var允许重新定义某个变量;在同一个块级作用域内,let不允许重新申明!

var num = 10;
var num = 20;
console.log(num);
// 输出结果:20

// 同一块级作用域
{
  var num2 = 30;
  let num2;
  // 报错,提示num2已经被申明
}

// 不同块级作用域
{
  let result = 1;
  {
    let result = 2;
  }
  console.log(result);
}

暂时性死区

网上很多资料对其解释的比较绕,其实压根就不需要太在意这些概念。
秉持一个原则:let必须先申明再使用! let必须先申明再使用! let必须先申明再使用!重要的事情说三遍!!!就可以避免该问题。

let color = 'red';
function getColor() {
  color = 'green';
  let color;
  return color;
}
getColor();
// 报错,虽然不同块级作用域,可以重新申明变量,但是不允许在未申明之前直接使用

window对象

另外一个小的细节点,那就是window对象。

var a = 1;
window.a // 输出结果为:1

let b = 2;
window.b  // 输出结果:undefined

const(具有let一样的特性)

const申明变量时,需要注意2点:

  1. 申明后必须直接初始化,不能留在以后赋值,否则报错;
  2. const申明的变量并不是固定不变的
    针对第二点,单独说明如下:
const MAX = 100;
MAX = 200;
// 报错,普通变量用const申明后,无法再修改

const Student = {
  name: '小红'
};
Student.name = '小明';  // 可以修改
Student = {};                  // 报错

根据上面两个例子可知:const申明的变量,如果是普通变量,确实无法再修改;但如果是引用类型的变量(数组、对象),则可以修改。也就是说,const申明的变量是不变的,指的是变量所指向的内存地址的不变

相关文章

  • React Developer应该了解的一些JS语法糖

    var vs let vs const var: function block. If declared glo...

  • var VS let

    本文主要讲解一下var与let在使用上的一些区别。 变量申明提升 var允许变量申明提前;但let不允许(即let...

  • var VS let

    ES5下的var 由于js变量提升法则,var不仅仅在它的代码作用域有用!可以看以下demo。 分别点击两段文字,...

  • let vs var

  • let VS var

    是什么 let const是ECMAScript 6提供的新特性。let可以解决var的“不完美“。 为什么(va...

  • 「翻译」在JavaScript中何时使用var、let及cons

    原文链接:var vs let vs const in javascript原文作者:Tyler McGinnis...

  • var VS let VS const

    var: function scoped undefined when accessing a variabl...

  • Let vs Var vs Const

    var console: let error: 'i' is not defined(i 未被定义) 所以 当以v...

  • 了解es6

    vs code中文设置: let和const 1.let定义变量,为了取代var 2.const定义常量 箭头函数...

  • ES6总结

    vs code中文设置: let和const 1.let定义变量,为了取代var 2.const定义常量 箭头函数...

网友评论

      本文标题:var VS let

      本文链接:https://www.haomeiwen.com/subject/bksnbftx.html