安全渗透重点内容

this是js中的一个关键字,在不同的场合使用,this的值会发生变化,下面我将详细的介绍this在函数中的各种指向。

在方法中,this表示该方法所属的对象。
如果单独使用,this表示全局对象。
在函数中,this表示全局对象。
在函数的严格模式下,this是未定义的(undefined)。
在事件中,this表示绑定事件的元素对象。
使用new 构造函数创建对象,this就是实例对象


1.作为函数,它的this指向是全局变量。作为方法,它是window对象的方法
 function fn(){
    var a=123
    console.log(this.a)
    console.log(this)
}
fn()
2.作为对象内部this当然就是指向对象obj
var obj={
    var a='123'
    fn:function(){
        console.log(this.a)
        console.log(this)
}
}
obj.fn()

3.new一个实例对象b,等于把函数Fn复制了一份放在对象b对象里面,this的指向的就是b对象。


function Fn(){
    this.a='123'
}
var b=new Fn()
console.log(b.a)

4.返回值是一个对象时,this指向的就是返回的对象,如果返回值不是一个对象,那么this指向函数的实例

//构造函数中有返回值的情况。
function fn(){
    this.a=123
    return {}
}
var b=new fn()
console.log(b.a)
 

function fn(){
    this.a=123
    return 1
}
var b=new fn()
console.log(b.a)
5.返回值是null的特殊情况
function fn(){
    this.a=123
    return null
}
var b=new fn()
console.log(b.a)


JavaScript异步任务的微任务和宏任务

宏任务通常指与浏览器渲染相关的任务

常用的宏任务有:SetTimeout、SetInterval等等

  SetTimeout:延时器用法

  let blue = '我是什么颜色'
  let outTimer = setTimeout(function() {
    console.log(blue) // 两秒种后控制台打印
    clearTimeout(outTimer) // 关闭延时器
  }, 2000)

SetInterval:定时器用法

  let money = 1
  let interTimer = setInterval(function() {
    console.log(k++) // 若不关闭,指定时间无限循环执行
    if (k >= 5) clearInterval(interTimer) 
  }, 2000)

微任务一般是指不与主线程任务同步执行的任务,常用微任务:Promise.then(经常用到的典型例子)、Object.observe、MutationObserver等

Promise 的创建

  let PUA = function(val) {
    return new Promise((resolve, reject) => {
      if (val === 1) resolve('成功')
      else reject('失败')
    })
  }
  console.log(PUA(1)) // 值与 if 匹配,会返回成功

Promise 的 .then() 方法

  let PUA = function(val) {
    return new Promise((resolve, reject) => {
      if (val === 1) resolve('成功')
      else reject('失败')
    })
  }
  PUA(1).then((val) => {
    console.log(val)
    console.log('成功后打印')
  })

执行顺序是:同步任务 ===> 微任务 ===> 宏任务

你可能感兴趣的:(javascript,开发语言,ecmascript)