- 在定义函数时可以传入默认参数值,当不为有默认参数值的参数传入值或者主动为其传入undefined时,会使用这个默认值。
- 在ES6中,如果一个函数使用了默认参数值,arguments对象会保持与命名参数分离。
function mixArgs(first, second="b") {
console.log(arguments.length);
console.log(first === arguments[0]);
console.log(second === arguments[1]);
first = "c";
second = "d";
console.log(first === arguments[0]);
console.log(second === arguments[1]);
}
mixArgs("a");
// true false false false
- Rest参数和扩展
不确定函数有几个参数时,可以使用...来动态确定参数数量
function sum(...m) {
let total = 0;
for (let i of m) {
total += i;
}
console.log(total);
}
sum(2,4,98,40);
在调用sum函数时,可以传入不同数量的参数。
...可以使用在扩展数组中
let [x,y] = [4, 8]; // x, y对号入座,即数组模型的解构
let [x,...y] = [4, 8, 9, 1, 3]; // x对号入座,y就扩展为一个包含四个元素的数组
- Promise语法, 封装的时候通过链式调用.then的方式获取回调,在resolve中处理结果,也可以用Promise.all()API同时调用多个接口和请求,然后通过解构一一返回结果以减少代码的冗余。
let checkLogin = function () {
return new Promise(function (resolve, reject) {
let flag = document.cookie.indexOf("userId") > -1 ? true : false;
if(flag=true){
resolve({
status: 0,
result: true
});
}else{
reject("error");
}
});
};
let getUserInfo = () => {
return new Promise((resolve, reject) => {
let userInfo = {
userId: "559"
};
resolve(userInfo);
})
};
checkLogin().then((res) => {
if(res.status === 0){
console.log("success");
return getUserInfo();
}
}).catch((error) => {
console.log(`errors:${error}`);
}).then((res2) => {
console.log(`userId:${res2.userId}`);
});
Promise.all([checkLogin(), getUserInfo()]).then(([res1, res2]) => {
console.log(`result1:${res1.result}, result2:${res2.userId}`);
});
Promise.all()中的参数必须是Promise对象,不能随便传别的参数进去。
- 模块化机制
export导出,import导入,需要注意的是,如果导出为变量,导入就要用花括号来接受变量
// sum.js
export let sum = (x,y)=>{
return x + y;
};
// main.js
import {sum, minus} from "./util";
也可以通过*封装然后调用
网友评论