代码输出一个数字而不是未定义?

The code outputs a number instead of undefined?

提问人:aaKhan 提问时间:6/4/2019 最后编辑:ShiderszaaKhan 更新时间:4/12/2022 访问量:76

问:

根据我的理解,当我调用时,下面的代码应该输出 undefined,而是记录一个数字。我正在使用 chrome。有人可以详细说明为什么会发生这种情况吗?提前致谢。hi()

代码的屏幕截图:

enter image description here

const obj = {
  name: "abc",
  sayHi: function() {
    console.log(this.name)
  }
}

obj.sayHi();
let hi = obj.sayHi;
hi();

JavaScript 函数 这个 词法范围

评论

0赞 A Rogue Otaku 6/4/2019
这是大家在学习js时面临的经典问题。此问题是由于 for js 语法的上下文而产生的。尝试在谷歌上搜索 js 正常函数与箭头函数。thisfunction
0赞 Isaac Vidrine 6/4/2019
无法复制这个,它对我有用。值未定义,因为它应该是这样
5赞 Paul 6/4/2019
您没有使用严格模式,如果您在浏览器窗口中运行它,它也不是未定义的。如果添加为函数的第一行,则会收到一个错误: , since is .this.namewindow.name"use strict";TypeError: Cannot read property 'name' of undefinedthisundefined
2赞 Heretic Monkey 6/4/2019
“this”关键字如何工作?
2赞 Paul 6/4/2019
@aaKhan JavaScript 不是严格模式,除非你或代码是类的一部分。"use strict"

答:

0赞 John Slegers 4/12/2022 #1

调用 时,指 。obj.sayHi()thisobj

调用时,是指对象。hi()thiswindow

如果你想成为 ,你需要使用 .thisundefined"use strict";

如果想要,可以将函数设置为。thisobjbindobj

演示

"use strict"

const obj = {
  name: "abc",
  sayHi: function() {
    console.log(this)
  }
}

obj.sayHi();

let hi1 = obj.sayHi;
hi1();


let hi2 = obj.sayHi.bind(obj);
hi2();