首页 > 试题广场 >

请问以下 JS 代码最终输出的结果是() let metho

[单选题]
请问以下 JS 代码最终输出的结果是()
let method;
let obj = {
  go() {
    console.log(this);
  }
};
(obj.go)();
(method = obj.go)();
(obj.go || obj.stop)();
  • {go: ƒ}、window、{go: ƒ}
  • {go: ƒ}、window、window
  • window、window、window
  • {go: ƒ}、{go: ƒ}、{go: ƒ}
  • (obj.go) 是一个表达式,其值是 obj 对象上的 go 方法(函数)。
  • 后面的 () 是函数调用操作符
  • 整体 (obj.go)() 的意思是:“获取 obj.go 这个函数,然后立即调用它”。也就是等价于obj.go(),在 非严格模式 下,点调用(.)会将 this 绑定为 obj。所以打印值是{ go: f }

    (obj.go)() 和 (obj.go())() 的区别是什么?

    ✅ (obj.go)()

    • 获取 obj.go 函数(不调用),
    • 然后调用它:相当于 obj.go()。
    • this 指向 obj
    • 输出:obj
    ❌ (obj.go())()
    • 先调用 obj.go():
    • obj.go() 会执行函数体,即 console.log(this),此时 this === obj,所以会先打印一次 obj。
    • 但 go 函数没有 return 语句,默认返回 undefined。
    • 然后尝试调用 undefined() → TypeError: undefined is not a function
    1. 先打印 obj
    1. 然后抛出错误:Uncaught TypeError: (intermediate value)() is not a function


发表于 2025-12-15 09:41:21 回复(0)