2020-01-05 ES6

2020-01-05  本文已影响0人  月圆星繁

let 和 const

let命令

let 声明变量,在let命令所在的代码块内有效。
var 声明变量,全局作用域有效。

{
    var a = 1;
    let b = 2;
}
a //   1 
b //   referenceError: a is not defined.

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

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

/*************************************************************************/
/*let 命令声明的变量一定要在声明后使用,否则就会报错*/
console.log(foo); 
var foo = 2;  // undefined

console.log(bar);
let bar = 4;  // referenceError

/*************************************************************************/

/*只要块级作用域内存在let命令,它所声明的变量就绑定了这个区域,不再受外部的影响*/
var temp = 123;
if(true) {
  temp = 'aaa';  // referenceError;
  let temp; 
  console.log(temp); //undefined
}

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

/*************************************************************************/
/*let 不 允许在相同作用域内重复声明同一个变量,不能在函数内部重新声明参数*/
// 报错
function () {
  let a = 2;
  var a = 3;
}
//报错
function() {
   let a = 10;
   let a = 2;
}

const命令

const 声明一个只读常量。一旦声明,常量的值就不能改变,并不是变量的值不得改动,而是变量指向的内存不能改动。对于简单的数据类型(数值、字符串、布尔值)而言,值就是保存在变量指向的内存地址中,因此等同于常量。但对于复合类型的数据(对象和数组)而言,变量指向的内存地址保存的是一个指针,const只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,这个完全不能控制。

const PI = 3.01415926;
console.log(PI);  //3.01415926
PI=3;  // TypeError: Assignment to constant variable.

/*const声明变量只声明不赋值就会报错*/
const foo;

/**const的作用域与let相同:只在声明所在的块级作用域内有效**/
if(true){
    const MAX = 5;
}
console.log(MAX);  //MAX is not defined

函数

ES6之前,不能直接为函数的参数指定默认值,只能采用变通的方法。

function log(x, y) {
    y = y || 'world';
    console.log(x,y);
}
log('hello');  // hello world
log('hello','aaa');  // hello aaa
log('he',' ');   // hello world

ES6 允许为函数的参数设置默认值,直接写在参数定义的后面。

function log(x, y = 'world') {
   console.log(x, y);
}

log('hello');
log('hello', 'China');
log('hello', ' ');

ES6比ES5简洁自然。参数默认值的位置,通常情况下,应该是函数的尾参数。

箭头函数

基本用法

// 使用(=>)定义函数。
var f = v => v;
// 等同于:
var f = function (v) {
  return  v;
}

如果箭头函数不需要参数或者需要多个参数,就使用圆括号代表参数部分

var f = () => 5;
//等同于
var f = function() { return 5; }

var sum = (a,b) => a +b;
//等价于
var sum = function(a+b) {
  return a+b;
}

如果箭头函数的代码块部分多于一条语句,就要使用大括号将其括起来,并使用return 语句返回。
var sum = (a,b)=> { return a+b; }
由于大括号被解释为代码块,所以如果箭头函数直接返回一个对象,必须在对象外面加上括号。
var getTempItem = id => ({ id:id, name: "Temp" });

待补充...

Promise
上一篇下一篇

猜你喜欢

热点阅读