美文网首页
ES6中let与var的区别

ES6中let与var的区别

作者: NearZXH | 来源:发表于2018-11-14 09:04 被阅读0次
  • 通过var定义的变量,作用域是整个封闭函数,是全域的 。通过let定义的变量,作用域是在块级或是子块中。
for (let i = 0; i < 10; i++) {
  // ...
}

console.log(i);
// ReferenceError: i is not defined
//计数器i只在for循环体内有效,在循环体外引用就会报错。1234567
  • 变量提升现象:浏览器在运行代码之前会进行预解析,首先解析函数声明,定义变量,解析完之后再对函数、变量进行运行、赋值等。
    -不论var声明的变量处于当前作用域的第几行,都会提升到作用域的头部。
    -var 声明的变量会被提升到作用域的顶部并初始化为undefined,而let声明的变量在作用域的顶部未被初始化
// var 的情况
console.log(foo); // 输出undefined
var foo = 2;
//相当于
var foo;  //声明且初始化为undefined
console.log(foo);
foo=2;
12345678
// let 的情况
console.log(bar); // 报错ReferenceError
let bar = 2;
//相当于在第一行先声明bar但没有初始化,直到赋值时才初始化
123456
  • 但是直接用let声明变量不赋值是会打印undefined,还是初始化了,只是let声明放在赋值之后,let声明会提前但不会初始化。
let a;
alert(a);//值为undefined

alert b;//会报错
let b;12345
  • 只要块级作用域内存在let命令,它所声明的变量就“绑定”这个区域,不再受外部的影响。总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的,尽管代码块外也存在相同全局变量。
var tmp = 123;

if (true) {
  tmp = 'abc'; // ReferenceError
  let tmp;
}
alert(tmp);  //输出值为123,全局tmp与局部tmp不影响1234567
  • let不允许在相同作用域内,重复声明同一个变量。
// 报错
function () {
  let a = 10;
  var a = 1;
}
// 报错
function () {
  let a = 10;
  let a = 1;
}

[转自]:https://blog.csdn.net/zuiziyoudexiao/article/details/76890102s

相关文章

  • ES6基础—let与var/const/对象字面量的增强写法

    为了弥补JavaScript中var的缺陷,所以在ES6中有了let let与var的区别 1.let定义的变量存...

  • let与const

    let用法 ES6新增了let命令,用法与var类似,主要用于声明变量,且逐渐代替var,与var的区别为,其声明...

  • ES6新增命令:let

    let的介绍 let是ES6新增的命令。作用:声明变量。类似于:var。与var的区别:使用let声明的变量,只在...

  • 2019年前端面试题-03

    let与var的区别? Let为ES6新添加申明变量的命令,它类似于var,但是有以下不同: 1、var声明的变量...

  • 总结一下前端常见javascript基础面试题:

    1.var ,let 和const的区别: let和const是es6新增的语法, let和var都可以定义变量,...

  • es6读书笔记

    标签: es6入门读书笔记 let命令 let与var的区别 let所声明的变量只在let命令所在的代码块内有效(...

  • javascript碎片知识000

    const let var 3者的区别。 const 和 let 为es6新增的定义变量的关键字。 var存在...

  • js常见知识点--第二篇

    一、var 、let 、const的区别 var是ES5提出的,let和const是ES6提出的。var不存在块级...

  • 2019-03-03

    es6 第二章 let和const命令 let 基本用法 let和var的区别let:只在定义的代码块中起作用va...

  • 关于ES6的let命令

    1、let的基本用法以及let和var的区别 (1) let与var一样是用来声明变量的,与var的区别是let所...

网友评论

      本文标题:ES6中let与var的区别

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