JavaScript里this的问题

其实这个问题已经有很多资料了。今天想记录一下的是一个修正this指向的奇技淫巧。
今天同事问了一个问题,就是发现webpack打包出来的东西里面有很多函数是这样子调用的。

1
(0, xx.defalut)()

一开始我也是懵了,想着这样调用跟xx.default()这样直接调用有什么区别呢。
后来看了一下发现区别还是很大的。我们都知道在JS里面,this的值是在函数调用的时候才确定的。看一下下面的例子

1
2
3
4
5
6
7
8
9
var test = {
testFn: function(){
console.log(this)
}
}
test.testFn() //this 指向 test

var tempFn = test.testFn
tempFn() //this 指向全局对象

其实(0, test.testFn)()就是跟上面调用tempFn的结果是一样的。如果再留意一下webpack打包出来的代码,像(0, test.testFn)()这样调用的基本都是在源码里面调用了全局方法。这样就需要把方法里面的this修正会指向全局对象。