有如下代码片段:var obj = {a: 1, b: function () {alert(this.a)}}; - Kaiqisan

2022-07-29,,,,

有如下代码片段

var obj = {a: 1, b: function () {alert(this.a)}}; 
var fun = obj.b; 
fun();
  • 弹出a
    
  • 弹出1
    
  • 弹出undefined
    
  • 什么也看不到
    

正确答案: C 你的答案: B (错误)

如果是 obj.b()的话,this指向还是正常的,选B是对的,但这次又把执行分为两步,又因为 this的值要等到代码真正执行时才能确定

在这里使用 fun() 该方法未被obj调用,而是在前面定义 var fun = obj.b; 的时候另起一个地址存放了这个方法,将这个fun注册在Window上面,此时fun已经脱离了obj

上面的过程相当于

let fun = function () {
    alert(this.a) // 此时this指向Window,Window里面没有a参数,所以为undefined
}
fun()

总结

考验一个人的细节问题!

本文地址:https://blog.csdn.net/qq_33933205/article/details/109237424

《有如下代码片段:var obj = {a: 1, b: function () {alert(this.a)}}; - Kaiqisan.doc》

下载本文的Word格式文档,以方便收藏与打印。