我正在尝试使用this
关键字在函数内部调用函数。但我收到类似
ERROR TypeError: this.setNormal is not a function
据我所知,我在内部调用函数的方式可能是错误的原因。请纠正我的方法。
// first function
fun1 (){
setTimeout(function() {
this.setNormal();
}, 2000);
}
// second function
setNormal(){
}
答案 0 :(得分:2)
更改
setTimeout(function() {
到
setTimeout(() => {
arrow function将允许您在setTimeout回调函数内使用this
(this
指向该函数之外的对象)。
答案 1 :(得分:2)
问题在于:
// first function
fun1 (){
setTimeout(function() {
this.setNormal();
}, 2000);
}
// second function
setNormal(){
}
这是您自定义this
以来使用的function(){}
语法的方式。如果您阅读了setTimeout
由setTimeout()执行的代码从执行上下文中调用 与调用setTimeout的函数分开。通常 为被调用函数设置this关键字的规则适用,并且 如果您尚未在通话中设置此设置,也未设置为绑定,则默认设置为 非严格模式下的全局(或窗口)对象,或者在 严格模式。它与的this值不同 名为setTimeout的函数。
我假设您没有在全局范围内定义setNormal
,因此出现了问题。
现在,在ES6中,许多人使用() => {}
函数语法在封闭范围内对此进行了关闭。
箭头函数本身没有此函数。这个值 使用封闭的词汇上下文,即,箭头函数跟随 正常的变量查找规则。所以在寻找这个不是 在当前范围内存在,他们最终从其封闭中发现了这一点 范围。