function x(){ function z(){console.dir(this)} z();}
z()的this 为啥是window? 它在x里面啊
js 中 this 的问题比较常见。
我一般会这样简单判断:
在你的示例中,函数 z 可以看作是 window 调用,所以 this 指向 window。
8 回答4.6k 阅读✓ 已解决
6 回答3.3k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
6 回答2.2k 阅读
5 回答6.3k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
4 回答2.7k 阅读✓ 已解决
其他回答的挺好了。
我发下我写的文章吧,相对详细。
面试官问:JS的this指向 总结部分
new
调用:绑定到新创建的对象,注意:显示return
函数或对象,返回值不是新创建的对象,而是显式返回的函数或对象。call
或者apply
( 或者bind
) 调用:严格模式下,绑定到指定的第一个参数。非严格模式下,null
和undefined
,指向全局对象(浏览器中是window
),其余值指向被new Object()
包装的对象。undefined
,否则绑定到全局对象。ES6
中的箭头函数:不会使用上文的四条标准的绑定规则, 而是根据当前的词法作用域来决定this
, 具体来说, 箭头函数会继承外层函数,调用的 this 绑定( 无论 this 绑定到什么),没有外层函数,则是绑定到全局对象(浏览器中是window
)。 这其实和ES6
之前代码中的self = this
机制一样。DOM
事件函数:一般指向绑定事件的DOM
元素,但有些情况绑定到全局对象(比如IE6~IE8
的attachEvent
)。一定要注意,有些调用可能在无意中使用普通函数绑定规则。 如果想“ 更安全” 地忽略
this
绑定, 你可以使用一个对象, 比如
ø = Object.create(null)
, 以保护全局对象。