JavaScript: setTimeout & setInterval

 

let i = 0
setTimeout(function (n) {
  console.log(55, n)
}, 1000, setTimeout(function () {
  console.log(44, i)
  i++
  return i+2
}))

 

 

先计算第三参数, 返回值为Timeout对象, 传递给第一参数, 浏览器中返回window

 

const obj = {
  a: function () {
    console.log(this)
    setTimeout(function () {
      console.log(this)
    }, 1000)
  }
}

// obj.a()

let b = obj.a
b()

Node:

 

 

Browser:

 

 

Node中指向Timeout对象, Browser中指向全局window

 

const obj = {
  a: function () {
    console.log(this)
    setTimeout(function () {
      console.log(this)
    }, 1000)
  }
}

obj.a()

 

Node:

 

 Browser:

 

 

 

Arrow Function

const obj = {
  a: function () {
    console.log(this)
    setTimeout(() => { console.log(this) }, 1000)
  }
}

obj.a()

 

一致

 

 

const obj = {
  a: function () {
    console.log(this)
    setTimeout(() => { console.log(this) }, 1000)
  }
}

let b = obj.a
b()

Node

 

 Browser

 

 

当b执行时, this才确定, setTimeout的arrow function绑定刚确定的this

posted @ 2022-03-15 11:10  ascertain  阅读(18)  评论(0编辑  收藏  举报