一、ECMAScript和JavaScript的关系。
ECMAScript是JavaScript的规范,JavaScript是ECMAScript的实现。
二、var 和ES6新增的的let、const之间的区别:
1.var 属于函数作用域
function v (){
var a = 100;
if(true){
var a = 200;
}
console.log(a)//a----200 if--如果条件为真 var a = 200;否则就不执行if语句,那打印a--100
}
v();
总结:
/*
当全局作用域和局部作用域中的变量名相同,取局部作用域的变量(这句话只针对于 var)
*/
2.let和const属于块级作用域
function l (){
let a = 100;
if(true){
let a = 200;
}
console.log(a)//a----100 打印的是外面的if外面的a
}
l();
function c (){
const a = 100;
if(true){
const a = 200;
}
console.log(a)//a----100 打印的是外面的if外面的a
}
c();
总结:
/*
一对花括号{}就是一个块级作用域
*/
3.只有var存在变量提升,let和const不存在变量提升
console.log(a);//a----undefined
var a = 123;
console.log(a);//报错
let a = 123;
console.log(a);//报错
const a = 123;
4.let和const在同一个作用域下不能重复定义通相同的变量名
var a = 123;
var a = 12;
console.log(a);//12
let a = 123;
let a = 12;
console.log(a);//报错
const a = 123;
const a = 12;
console.log(a);//报错
5.const声明的是一个只读的 常量(基本类型),一旦声明,常量的值就不改变
let a = 100;
a = 99;
console.log(a)//a----99
const a = 100;
a = 99;
console.log(a)//报错
6.const 一旦声明了就必须初始化,不能只声明不赋值
let a;
console.log(a)//undefined
const a;
console.log(a)//报错
7.const声明的常量(引用类型),即数组和对象,指向的是对应的内存地址不能改动,对应的值是可以修改的
const arr = [];
arr[0] = 1;
console.log(arr)//arr----[ 1 ]
const obj = {};
obj.name = 'abc';
console.log(obj)//obj----{ name: 'abc' }
//错误写法
const obj = {};
const obj ={id:1} ;
console.log(obj)//报错--- SyntaxError: Identifier 'obj' has already been declared
总结:
/*
声明的常量是基本类型,那么常量的值不可以改变
声明的常量是引用类型的话,它的不变是指对应的内存地址不能改变,值是可以改变的
*/