【发布时间】:2018-09-27 17:14:48
【问题描述】:
我在使用 jshint 时收到以下警告。 为什么?
如果使用函数调用来执行严格模式的函数,它的 'this' 值将是未定义的。
function demo() {
'use strict';
document.querySelector('#demo').addEventListener('click', test);
function test() {
console.log(this);
}
}
【问题讨论】:
-
因为如果您调用
test而不使用某种方式提供明确的thisArg,this确实会是undefined。所以test()会给你undefined的this值。 -
您需要使用
.call()或.apply()将this传递给通过间接调用调用的函数。我不知道为什么严格模式会这样做,但确实如此。 -
如果您尝试将
this用作对象(例如尝试访问属性),则会导致问题。在所写的特定功能中不是问题。没有严格模式,你肯定是一个对象。 -
我想我必须配置 jsHint 以不触发这些警告?
-
是的,这一切都是可配置的。 jshint.com/docs/options/#validthis
标签: javascript jshint