ES6学习笔记(一)——-let和const定义变量,解构赋值

一 . let定义变量

1)let定义的变量只在代码块{ }内使用有效,在代码块外使用会报错(for循环的计数器很适用,fpr循环的内部是一个父作用域,循环体内部是一个单独的作用域)

var a = [];
for (var i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 10


var a = [];
for (let i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 6


2)vart定义的变量存在预解析(即变量可以在声明之前使用,值为undefind).let定义的变量须先定义后使用。

暂时性死区(TDZ):在代码块内,变量使用let声明,在声明之前使用(死区)就会报错。

// 不报错
var x = x;

// 报错
let x = x;
// ReferenceError: x is not defined

3)let定义的变量不允许在相同作用域内重复声明,所以不能再函数体内部重新声明参数。

二.块级作用域

1.外层代码块不受内层代码块的影响,各个代码块之间的变量互不影响

function f1() {
  let n = 5;
  if (true) {
    let n = 10;
  }
  console.log(n); // 5
}

三. const定义常量

定义常量(  作用于块级作用域),一旦声明,常量的值就不能改变,所以const一旦声明变量,就必须立即初始化,不能留到以后赋值。其他特性和let一样。

四. 解构赋值

1.作用:ajax交互数据

2.数组的解构赋值        注意:左右结构格式一致,左边等于右边

let[a,b,c]=[12,[5,6]];
console.log(a,b,c)     //12 [5,6] undefind

let [a,[b,c]]=[12,[5,6]]
console.log(a,b,c)    //12 5 6

let json={name:'nana',age:18,job:'fe'};
let {name,age,job}=json;
console.log(name,age,job)  //nana 18 fe
 
let {name,age,job:ui}=json
console.log(name,age,ui)   //nana 18 fe(如果打印job结果为undefind,  job:ui 意思为给job取个别名为ui)


给一个默认值:ES6 内部使用严格相等运算符(===),判断一个位置是否有值。所以,只有当一个数组成员严格等于undefined,默认值才会生效。

let=[a,b,c="暂无数据"]=['aa','bb'];
console.log(a,b,c)  //aa bb 暂无数据


let [a,b,c]=['aa','bb',undefind];
console.log(a,b,c)   //aa bb undefind


let=[a,b,c="暂无.."]=['aa','bb',undefind];
console.log(a,b,c)  //aa bb 暂无..

let=[a,b,c="暂无.."]=['aa','bb',null];
console.log(a,b,c)  //aa bb null   定义为null时代表有值,不是没值,一个空对象




3.对象的解构赋值


let { foo: baz } = { foo: 'aaa', bar: 'bbb' };
baz // "aaa"
foo // error: foo is not defined          
//对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者。



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 





 

你可能感兴趣的:(ES6学习笔记(一)——-let和const定义变量,解构赋值)