一,变量赋值(值与引用)
js总是按照值来给变量赋值,当指定的值是js的五种原型类型之一(Boolean、null、undefined、String、Number)时,将为变量分配实际的值,但是,当指定的值是Array、Function或者Object时,将会为变量分配内存对象的引用。
二,闭包
闭包是一种重要的js模式,可用于访问私有变量。下面这个示例,createGreeter返回一个匿名函数,这个匿名函数可以直接访问参数greeting,在后续的调用中,sayHello将有权访问这个greeting
function createGreeter(greeting){
return function(name){
console.log(greeting +',' +name);
}
}
const sayHello = createGreeter('Hello') //传入createGreeter函数的实参'Hello'
sayHello('Mike'); //传入匿名函数的实参,返回结果'Hello,Mike'
三,解构
js参数解构是一种从对象中提取属性的常用方法
const person ={
name:'augus',
age :20,
}
function introduce( { name,age } ){
console.log(`I am ${name} and I am ${age} years old!`); //模板字符串语法
}
console.log(introduce(person)) //I am augus and I am 20 years old!
四,展开(spread)语法
const arr = [1,-2,5,4,8];
const max = Math.max(...arr);
console.log(max); //8
五,变长参数(rest)语法
利用这个语法,传给一个函数的任意数量的参数都可以放入一个数组中
function myRest(...args){
console.log(args[0] + args[1]);
}
myRest(1,2,3,4) //返回结果为3
六,生成器
用星号 * 表示特殊的生成器函数。生成器函数用来指定下一次调用next()会产生什么value(最后调用next()会返回undefined),也可以使用循环生成无限数量的value
function* greeter(){
yield 'Hi';
yield 'How are you?';
yield 'Bye';
}
const greet = greeter();
console.log(greet.next().value); // 'Hi'
console.log(greet.next().value); // 'How are you?'
console.log(greet.next().value); // 'Bye'
七,回调函数
我记得在一本nodejs入门的书上有一句让我印象深刻的话,回调就是把函数当作一个参数传入我们的目标函数中,下面这个例子把console.log这个函数作为回调传给myFunc,并用setTimeout函数模拟了回调的延迟
function myFunc(text,callback){
setTimeout(function(){
callback(text);
},2000);
}
myFunc('Hello world',console.log); //2秒左右后,浏览器控制台打印 'Hello world'
八,promise
promise是用来帮助我们**处理’回调地域’**的,将异步逻辑包装在promise中,使用 "then"来处理成功的情况,使用"catch"来处理异常
const myPromise = new Promise(function(res,rej){
setTimeout(function(){
if(Math.random()<0.9){
return res('Yes!');
}
return rej('No!');
},1000);
})
myPromise.then(function(data){
console.log("Success"+data);
}.catch(err){
console.log("Error"+err);
}
九,Async/Await
async/await其实是基于promise的语法糖
const greeter = new Promise((res,rej) =>{
setTimeout( () => res('Yes!'),1000);
});
async function myFunc(){
const greeting = await greeter; //这边等greeter里面的setTimeout函数执行完,不用await,下面打印的是undefined
console.log(greeting);
}
myFunc(); //'Yes!'