var
声明变量时 不在函数内,就是全局声明
在函数内部声明,是局部声明
var printNumTwo;
for (var i = 0; i < 3; i++) {
if (i === 2) {
printNumTwo = function() {
return i;
};
}
}
console.log(printNumTwo());
//以上片段没有在函数内声明i,仍为全局变量,存储的函数将始终引用更新后的全局 i
变量的值
let
局部声明
关键字声明的变量可以重新赋值,但不能重新声明
const
声明的变量是只读的。 它们是一个常量值
分配给变量的对象(包括数组和函数)仍然是可变的。
只能防止变量标识符的重新分配。
//不能再对该变量进行赋值这一动作
分配给变量的对象(包括数组和函数)仍然是可变的
//即被声明的变量整体不变,但局部可变
Object.freeze()
任何更改对象的尝试都将被拒绝
匿名函数
一个函数作为参数传给另外一个函数的时候
不会在其他地方复用,所以我们不需要给它们命名。
const myFunc = function() {
const myVar = "value";
return myVar;
}
箭头函数
基本语法 参数 => 函数体(表达式
只有一个参数,则可以省略参数外面的括号。
const doubler = item => item * 2;
当箭头函数没有参数或者有多个参数,要用 () 括起来。
const myFunc = () => {
const myVar = "value";
return myVar;
}
当不需要函数体,只返回一个值的时候,箭头函数允许你省略 return
关键字和外面的大括号。
const myFunc = () => "value";
数体有多行语句,用 {} 包裹起来,表示代码块
var f = (a,b) => {
let result = a+b;
return result;
}
f(6,2); // 8
返回对象的时候,为了区分于代码块,要用 () 将对象包裹起来
var f = (id,name) => ({id: id, name: name});
f(6,2); // {id: 6, name: 2}
设置函数的默认参数
const greeting = (name = "Anonymous") => "Hello " + name;
console.log(greeting("John"));
console.log(greeting());
默认参数会在参数没有被指定(值为 undefined)的时候起作用
rest ...参数名
一个变量代替多个参数 //多个压缩成一个
spread
展开数组以及 需要多个参数或元素的表达式
展开操作符只能够在函数的参数中或者数组中使用。
将数组里的所有内容分解成一个由逗号分隔的列表
解构赋值(赋值运算符的扩展 是一种思想)
const user = { name: 'John Doe', age: 34 };
const name = user.name;
const age = user.age;
//合并同类项
const { name, age } = user;
赋予一个新的变量名
const { name: userName, age: userAge } = user;
//如果是赋值新变量名 {原名:新名}
将两个赋值语句替换成等价的解构赋值。 lowToday
和 highToday
应该为 LOCAL_FORECAST
中 today.low
和 today.high
的值。
const LOCAL_FORECAST = {
yesterday: { low: 61, high: 75 },
today: { low: 64, high: 77 },
tomorrow: { low: 68, high: 80 }
};
const {today:{low:lowToday, high:highToday } }= LOCAL_FORECAST;
//我的做法:先改名,再提取同类项
const source = [1,2,3,4,5,6,7,8,9,10];
function removeFirstTwo(list) {
// 只修改这一行下面的代码
[a,b , ...arr]=list ;
let a=list[0];
let b=list[1]; // 修改这一行
// 只修改这一行上面的代码
return arr;
}
let arr = removeFirstTwo(source);
${variable}
语法是一个占位符
for( let i = 0;i < arr.length;i++ ){
const failureItems = [];
failureItems.push(`'<li class="text-warning">${arr[i]}</li>'`) ;
}
const failureItems = [];
for (let i = 0; i < arr.length; i++) {
failureItems.push(`<li class="text-warning">${arr[i]}</li>`);
}
对象中定义一个函数的时候
es5function
关键字
const person = {
name: "Taylor",
sayHello: function() {
return `Hello! My name is ${this.name}.`;
}
};
es6简洁的函数声明:
const person = {
name: "Taylor",
sayHello() {
return `Hello! My name is ${this.name}.`;
}
};
class 语法定义构造函数
字母大写驼峰命名法 UpperCamelCase
是 ES6 class 命名的惯例,就像 SpaceShuttle
。
class Vegetable{
constructor(name){
this.name = name ;
}
}
const carrot = new Vegetable('carrot');
console.log(carrot.name); // 应该显示 'carrot'