关于js的9个概念

一,变量赋值(值与引用)
       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!'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值