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" });
待补充...