重新声明

  • ES6之前可以重新声明定义同一var变量,例如:
var x = 10;
var x = 2;
console.log(x);//输出2
  • ES6中的let不能在同一作用域中重新声明变量

声明提升

  • ES6之前,变量可以先赋值使用后再声明,例如:
x = 10;
console.log(x);//输出10
var x; //不声明也行

//扩展
"use strict";//ES5新增的严格模式
y = 10;
console.log(y);//输出10
var y; //在严格模式之后的代码,不声明会报not defined错误

函数声明和变量声明总是会被编译器“悄悄地”移动到最前面

  • ES6中的let必须先声明再使用

作用域

  • ES6之前只有两种作用域:全局变量和函数内的局部变量,都用var关键字声明。例如:
var x = 10;//全局
(function Text() {  
    var x = 2;//局部
    console.log(x);//输出2
})()
console.log(x);//输出10

上面用var声明的全局变量x值可以调用window.x输出,若使用let声明则不行

  • ES6中新增的块级和循环作用域,用let关键字声明。例如:
//块级作用域
var x = 10;
{
    let x = 2;
}
console.log(x);//输出10

//循环作用域
var x = 10;
for(let x = 0; x < 2; x++) {}
console.log(x);//输出10

上面的两块代码中的let如果换成var,则输出2

const常量

constlet一样都具有块级作用域,都不能在同一作用域中重新声明变量,区别是const使用前必须先初始化且初始化后无法重新赋值。


虽然无法重新赋值,但可以改变对象(JSON)或者数组中的值,例如:

const fruits = {name:"apple", color:"red", sum:"10"};

// 修改属性
fruits.sum = "100";

// 添加属性
fruits.owner = "liveJQ";

参考资料

  1. 菜鸟教程

相关资料

  1. ES6语法中常量声明(const)的实现原理

留言评论
推荐阅读
  • HTTP报文

    前言在TCP/IP四层模型之下,我们的计算机按部就班地执行着自己的任务。在网上冲浪的过程中,客户端在我们看不见的地方默默地发送着报文,...

    HTTP报文
  • JavaScript查漏补缺

    数组排序 arr.sort()可以按arr数组元素的首字母排序(依据ASCII值从小到大排序)。由于sort()函数会调用toStri...

    JavaScript查漏补缺
  • JS在网页上禁用鼠标右击等操作

    一本正经或许我们都养成了个“坏习惯”,在浏览器中碰到陌生的东西时,喜欢右击检查或按F12。然而,有时候却不能如你所愿 :T (此时你很...

    JS在网页上禁用鼠标右击等操作