欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-24 19:08:40
有如下代码片段: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 f...

有如下代码片段:

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