JS系列 - this

this的绑定方式:

  • 默认绑定(非严格模式下this指向全局对象, 严格模式下this会绑定到undefined)

  • 隐式绑定,this 永远指向最后调用它的那个对象(如 obj.foo()的调用方式, foo内的this指向obj)

  • 显示绑定(apply、call、bind)

  • new绑定

  • 箭头函数绑定(this的指向由外层作用域决定的)

一些特殊例子:

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

 
 
 
 
 

JS系列 - this

上一篇:cURL可以做的10件事


下一篇:css: reset input record