JavaScript----ES6常变量和关键字

let

  • ES5以前用var定义变量
  • ES6开始用let定义变量
  • 区别
  • let重复定义变量不会覆盖,会报错
let a = 1;
let a = 2;//报错
  • let定义的变量不会预解析
console.log(a);//报错
let a = 1;
  • let定义的变量只在当前代码块中有效,在代码块外界使用会报错
for(let i = 0;i < 5;i++){
    console.log(1);
}
console.log(i);//报错
  • let定义的变量有暂时性死区(绑定在当前代码块,不受外界影响), 在声明前使用定义的变量会报错
var tmp = 123;

if (true) {
  tmp = 'abc'; // 报错
  let tmp;
}
  • 一些隐蔽的死区
function (x = y,y = 1){
  ..................
}
let x = x;
  • let在全局作用域定义的变量不会成为全局属性
var a = 1;
// 如果在 Node 的 REPL 环境,可以写成 global.a
// 或者采用通用方法,写成 this.a
window.a // 1

let b = 1;
window.b // undefined

块级作用域

  • ES5和ES6的区别
    • 以下为阮一峰的案例
function f() { console.log('I am outside!'); }

(function () {
  if (false) {
    // 重复声明一次函数f
    function f() { console.log('I am inside!'); }
  }

  f();
}());
  • ES5语法的实际执行后的代码
function f() { console.log('I am outside!'); }

(function () {
function f() { console.log('I am inside!'); }
  if (false) {
  }

  f(); //I am inside!
}());
  • ES6的实际执行代码
function f() { console.log('I am outside!'); }

(function () {  
  var f = undefined
  if (false) {
    // 重复声明一次函数f
    f = function() { console.log('I am inside!'); }
  }

  f();//报错
}());
  • 注意点:
    • ES6的函数声明和var关键字有点像, 会将名称提升到全局作用域或者函数作用域的头部
    • 为了解决这种差异, 我们尽量用函数表达式的方式来定义一个函数
    • ES6 的块级作用域允许声明函数的规则,只在使用大括号的情况下成立,如果没有使用大括号,就会报错。

const

  • const定义一个常量, 一旦定义了就不能被更改
  • 注意点和let一样
    • 注意点补充: const定义的变量其实是一个指针,指向存储数据的地址,指针的指向不能改变,但是指向变量的内部的数据可以改变
const arr = [1, 3];
// arr = [2, 4]; // 改变指向
arr[0] = 666; // 指向内存中保存的数据可以改变
arr.push(777);
console.log(arr);//[666, 3, 777]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容