参考:https://segmentfault.com/q/1010000007406985/a-1020000007437795
摘要:
事实上,void的返回值都是undefined。 https://developer.mozilla.org...
在ES5之前,window下的undefined是可以被重写的,于是导致了某些极端情况下使用undefined会出现一定的差错。
所以,用void 0是为了防止undefined被重写而出现判断不准确的情况。
注: ES5之后的标准中,规定了全局变量下的
undefined值为只读,不可改写的,但是局部变量中依然可以对之进行改写。
补充一下:非严格模式下,undefined是可以重写的,严格模式则不能重写。