无法让以下内容通过 jslint/jshint
/*jshint strict: true */
var myModule = (function() {
"use strict";
var privVar = true,
pubVar = false;
function privFn() {
return this.test; // -> Strict violation.
}
function pubFn() {
this.test = 'public'; // -> Strict violation.
privFn.call(this); // -> Strict violation.
}
return {
pubVar: pubVar,
pubFn: pubFn
};
}());
myModule.pubFn();
我知道这是由于使用造成的this
在函数声明中,但我读了 Crockford 写的东西,他说这种违规是为了防止全局变量污染 - 但这里唯一的全局变量是我显式定义的变量......myModule
。其他所有内容都保存在立即函数范围内,我应该能够使用this
来引用模块。
有什么想法可以让这种模式通过吗?
Update:如果我使用函数表达式而不是声明,这似乎有效,即
var pubFn = function () { ...
不过,我不喜欢这种格式,更喜欢让函数名称和命名参数更接近,并且声明看起来/感觉更干净。老实说,我不明白为什么会引发违规 - 在这种模式中没有理由这样做。
JSHint 有一个option http://www.jshint.com/docs/ called validthis
, which:
[...] 当代码在严格模式下运行并且您使用时,会抑制有关可能的严格违规的警告this
在非构造函数中 [...],当您确信您使用this
在严格模式下有效。
在 JSHint 抱怨的函数中使用它,在您的情况下,它看起来像这样:
function privFn() {
/*jshint validthis: true */
return this.test; // -> No Strict violation!
}
function pubFn() {
/*jshint validthis: true */
this.test = 'public'; // -> No Strict violation!
privFn.call(this); // -> No Strict violation!
}
必须在它适用的每个函数中指定它似乎很痛苦,但是如果您在模块函数的顶部设置该选项,则可能会隐藏genuine您自己违反了严格模式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)