JS系列 - this

2021-02-06 21:14

阅读:421

1. let 或者 const,变量是不会被绑定到window上的;var 会

let a = 10 ;const b = 20;

function foo () { console.log(this.a);console.log(this.b) }

foo(); console.log(window.a)

答案:undefined  undefined  undefined

 
 

2.把一个函数当成参数传递到另一个函数的时候,也会发生隐式丢失的问题,与包裹着它的函数的this指向无关。在非严格模式下,this绑定到window上,严格模式undefined

var a = 2

function foo () { console.log(this.a) }

function doFoo (fn) {

// obj2.doFoo 调用该函数,this指向obj2,但是之后调用fn(就是foo)函数,this 指向的是 window

 

console.log(this)

fn()

}

var obj = { a: 1, foo }

var obj2 = { a: 3, doFoo }

obj2.doFoo(obj.foo) // 结果:{ a:3, doFoo: f } 和 2

 

3.匿名函数,它里面的this在非严格模式下始终指向的都是window

var a = 3

var obj2 = {

a: 2,

foo1: function () {console.log(this.a)},

foo2: function () {

setTimeout(function () {

console.log(this) console.log(this.a)

}, 0)

}

}

obj2.foo1(); obj2.foo2() // 结果:2 window 3

 
 
 参考:https://juejin.im/post/5e6358256fb9a07cd80f2e70
 
 
 


评论


亲,登录后才可以留言!