这在javascript中是什么意思?为什么我的第二个输出未定义?[复制]

What does this means in javascript ? Why is my second output undefined? [duplicate]

提问人:himanshu thakur 提问时间:3/3/2022 更新时间:3/3/2022 访问量:25

问:

谁能解释为什么我的输出未定义。我试图弄清楚这里有什么问题,对不起,我是javascript的新手。

function Person() {
        this.name = 'Jack',
        this.age = 25,
        this.sayName = function () {
    
            //enter code here this is accessible
            console.log(this.age);
    
            function innerFunc() {
    
                // this refers to the global object
                console.log(this.age);
                console.log(this);
            }
            
            innerFunc();

        }
    }
    
    let x = new Person();
    x.sayName();
    
    Output:
    25
    undefined
    Window {}
JavaScript 作用域 关闭 arrow-functions

评论

1赞 Nicholas Tower 3/3/2022
在普通函数中,的值由调用函数的方式决定。该代码未指定应指定的内容,因此默认为对象(或在严格模式下未定义)。 未定义。为了进行比较,在代码中,该部分指定应为 。thisinnerFunc();thiswindowwindow.agex.sayName();x.thisx
0赞 Andy 3/3/2022
“这是指全局对象”:该函数有自己的上下文,具体取决于它的调用方式。而且你的代码中有一些错别字。前两行应以分号结尾,而不是逗号。此外,在代码的一般术语中,在构造函数方法中拥有内部函数可能不是一个好主意。this

答:

0赞 brk 3/3/2022 #1

内部函数不知道是什么意思,所以它指定了全局的this。你可以用innerFuncthisbindthisinnerFunc

function Person() {
  this.name = 'Jack';
    this.age = 25;
    this.sayName = function() {
      console.log(this.age);

      function innerFunc() {
        console.log(this.age);
        console.log(this);
      }
      innerFunc.bind(this)();
    }
}
let x = new Person();
x.sayName();