let
- ES5以前用var定义变量
- ES6开始用let定义变量
- 区别
let a = 1;
let a = 2;//报错
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;
var a = 1;
// 如果在 Node 的 REPL 环境,可以写成 global.a
// 或者采用通用方法,写成 this.a
window.a // 1
let b = 1;
window.b // undefined
块级作用域
function f() { console.log('I am outside!'); }
(function () {
if (false) {
// 重复声明一次函数f
function f() { console.log('I am inside!'); }
}
f();
}());
function f() { console.log('I am outside!'); }
(function () {
function f() { console.log('I am inside!'); }
if (false) {
}
f(); //I am inside!
}());
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]
网友评论