我有一组方法,我通过这样的变量名调用它们:
var some = factory[some_method](a, b, c);
我的问题是我调用的一些方法需要 a, b, c
而有些只需要 a
或 a, b
。对我来说没问题,但是 JSLINT 提示 unused a/b
。
问题:
我怎样才能保留我的变量,尽管它们未被使用在特定于方法的范围内?我不想设置全局 unused:true
?是否也可以为单个方法在本地设置?
谢谢!
编辑:
我这样调用上面的方法:
// content_dict = determines which method to call (along with properties being set)
app.setContent = function (content_dict, url_dict, create, purge) {
var i, skip, container, target, pass, spec, dependency;
spec = url_dict || {};
switch (content_dict.generate) {
case "widget":
return factory[content_dict.type](content_dict, spec, create);
...
content_dict
和方法调用示例:
// {
// "generate": "widget",
// "type": "navbar",
// "property_dict": {
// "foo":"bar"
// }
// }
factory.navbar = function (content_dict) {
var navbar, controls, i, element, target, order;
if (content_dict === undefined) {
util.error({
"error": "Generate Navbar: Missing Configuration"
});
} else {
// navbar
navbar = factory.element(
"div",
{"className": "navbar ui-navbar " + (content_dict.class_list || "")},
{
"data-role": "navbar",
"role": "navigation",
"data-enhanced": "true"
},
{"data-reference": content_dict.reference || null}
);
// controls
controls = factory.element(
"ul",
{
"className": "ui-grid-" +
util.toLetter(content_dict.children.length - 1).toLowerCase()
}
);
// children
if (spec.children) {
for (i = 0; i < content_dict.children.length; i += 1) {
element = content_dict.children[i];
target = factory.element(
"li",
{"className": "ui-block-" + util.toLetter(i + 1).toLowerCase()}
);
// class string
// TODO: needed?
if ((element.type !== "input" && element.type !== "select") &&
element.direct) {
order = i === 0 ? " ui-first-child " :
(i === (content_dict.length - 1) ? " ui-last-child " : " ");
element.direct.className = (element.direct.className || "") +
order + (element.type === "a" ? (" ui-btn ui-shadow " +
factory.generateIconClassString(element)) : " ");
}
target.appendChild(app.setContent(element));
controls.appendChild(target);
}
}
// assemble
navbar.appendChild(controls);
return navbar;
}
};
所以,上面的方法不需要设置 url_dict,而这个方法需要:
// {
// "generate": "widget",
// "type": "page",
// "property_dict": {
// "foo":"bar"
// }
// }
factory.page = function (content_dict, url_dict, create) {
var i, j, last, wrapper, split_url, promises, container, target,
view, render;
container = document.getElementById(url_dict.id);
target = document.createDocumentFragment();
view = (url_dict && url_dict.mode) ? url_dict.mode : "default";
render = content_dict.layout[view];
if (render) {
promises = [];
for (i = 0; i < render.length; i += 1) {
promises[i] = app.setContent(render[i], url_dict, create);
}
} else {
util.error({"error": "factory.page: Missing view"});
}
return RSVP.all(promises)
.then(function (promises) {
for (j = 0; j < promises.length; j += 1) {
target.appendChild(promises[j]);
}
if (container === null || create === true) {
last = document.body.lastChild;
wrapper = factory.element("div", {"className": "ui-content"}, {});
wrapper.setAttribute("data-bound", true);
split_url = url_dict.url.split("#");
container = factory.element(
"div",
{
"id": url_dict.id,
"className": " ui-page " + ("ui-page-theme-" +
content_dict.theme || "") + " " + ((content_dict.fix &&
content_dict.fix === false) ? "" :
" ui-page-header-fixed ui-page-footer-fixed")
},
{
"data-module": url_dict.id,
"data-role": "page",
"data-url": split_url[1] ? split_url[1].split("?")[0] :
split_url[0],
"data-external-page": true,
"tabindex": 0,
"data-enhanced": true
}
);
wrapper.appendChild(app.breadcrumb(url_dict));
wrapper.appendChild(target);
container.appendChild(wrapper);
if (util.testForString("ui-footer", last.className)) {
document.body.insertBefore(container, last);
} else {
document.body.appendChild(container);
}
$(document).enhanceWithin();
// trigger new transition to this page
$.mobile.changePage("#" + url_dict.id);
} else {
factory.util.updatePageSection(url_dict.id, target);
// also changePage in case we are not on the active
// page (this will only happen deeplink > home
if (url_dict.id !== util.getActivePage()) {
$.mobile.changePage("#" + url_dict.id);
}
}
// update header
if (create !== false) {
app.setPageTitle(
content_dict.title_i18n,
target.querySelectorAll("div.ui-header")
);
}
})
.fail(util.error);
};
为了完整起见,举两个例子。我想我可以调整我的参数并最后传递 url_dict
,这意味着我的方法调用有很多变化。所以,问题仍然存在有没有办法在每个方法的基础上设置 JSLINT 规则?
谢谢。
最佳答案
您随时可以根据需要打开和关闭unparam
。
/*jslint white:true, browser:true, sloppy: true */
function test1(p1) {
// param check on, no error
window.alert(p1);
}
/*jslint unparam: true */
function test2(p1, p2, p3) {
// param check off temporarily, two unused, no error
window.alert(p2);
}
/*jslint unparam: false */
function test3(p1, p2, p3) {
// param check back on, one unused, error reported.
window.alert(p3 + p2);
}
尽管除非您担心在其他地方捕获未使用的参数,否则最好将 unparam
放在您的第一个 jslint 行中。
/*jslint white:true, browser:true, sloppy: true, unparam:true */
请记住,如果 /*jslint unparam: false */
位于文件中的任何位置,它会在文件的其余部分重新打开。第一个 jslint 设置不是全局的或类似的设置。
关于javascript - 如何在 JSLINT 中逐个方法地处理未使用的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20837166/