Javascript es6方法中函数内部的此值

Javascript es6方法中函数内部的此值,javascript,class,object,es6-class,Javascript,Class,Object,Es6 Class,所以我只是在测试ES6类方法中this的值是如何受到影响的 有人能解释一下为什么下面代码中的内部函数未定义中的this的值 类测试此{ outerFunc(){ log(“outerFunc中的this值:”,this); 函数innerFunc(){ log(“innerFunc中的this值:,this”); } innerFunc(); } }; var newTest=新测试此(); newTest.outerFunc()ES6类自动处于严格模式 这意味着任何普通函数调用都会在该函数中

所以我只是在测试ES6类方法中
this
的值是如何受到影响的

有人能解释一下为什么下面代码中的内部函数
未定义
中的
this
的值

类测试此{
outerFunc(){
log(“outerFunc中的this值:”,this);
函数innerFunc(){
log(“innerFunc中的this值:,this”);
}
innerFunc();
}
};
var newTest=新测试此();

newTest.outerFunc()ES6类自动处于严格模式

这意味着任何普通函数调用都会在该函数中将
this
的值设置为
undefined
。这就是你所看到的

仅供参考,这是一个严格模式功能,ES6唯一涉及的是它自动将类定义置于严格模式


在严格模式下,任何普通函数调用都会将该函数中的
this
设置为
未定义

在非严格模式下,任何普通函数调用都会将
设置为全局对象,该对象在浏览器中是
窗口
对象



您的问题的新部分是两个普通函数调用,而不是在严格模式下,它们都将
this
设置为全局对象。它并不是“保存”此
的值。它在两个函数调用中都将其设置为全局对象。

ah好的。。如果我删除“严格”模式,它是否会显示与此相同的
?@VSX-在ES6类定义中不能删除严格模式。即使您确实删除了严格模式,
也将被设置为
全局
对象。在Javascript中,调用函数时,
这个
会发生变化。如果希望
this
成为对象,则将
innerFunc
设为方法或使用
调用它。调用(this)
。仅供参考,
当您调用另一个函数时,此
永远不会保留。它总是根据调用函数的方式设置为某个值。@VSX,即使可以,答案也是否定的。它将是
window
@jfriend00请检查更新后的帖子。。。我主要的疑问是,为什么在ES6类方法中嵌套的函数中使用
this
与通常的嵌套函数不同。@VSX-如果它们都是在
严格的
模式下定义的,并且都被称为正常函数,那么
这两种方法中的
都将是
未定义的
。这里的主要方法应该是不要在函数中使用
this
,除非函数的调用方式使
this
的值变得有意义和已知。有关更多信息,请参阅。只需提醒一下!!,。即使在ES6的世界里,。使用好的
var=this
适用于这种类型的子函数调用。我想你真正想问的是:“为什么
this
innerFunc
中与
this
outerFunc
中不一样?”exactly@Keith“在ES6的世界中”,在适当的地方使用箭头函数更好。@PatrickRoberts这个问题的答案取决于:)