JS系列 - this
2021-02-06 21:14
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
上一篇:js 获取当天日期/时间
下一篇:cURL可以做的10件事