javascript - 如何在 JSLINT 中逐个方法地处理未使用的变量?

标签 javascript jslint unused-variables

我有一组方法,我通过这样的变量名调用它们:

var some = factory[some_method](a, b, c);

我的问题是我调用的一些方法需要 a, b, c 而有些只需要 aa, 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/

相关文章:

for-loop - 如何避免 "unused variable in a for loop"错误

python - Python 中的 Prolog 单例变量

javascript - 如何根据 javaScript 中的特定字符序列拆分文本

javascript - 声明没有未使用变量的 Marionette/Backbone 路由器 - JSLint

javascript - 是否可以使用外部配置文件以与 JSHint 的 .jshintrc 相同的方式配置 JSLint?

javascript - 新 JSLint : "Unexpected ' .'." explanation

c - 如何找到不相关的未使用属性?

Javascript/JQuery : Is there a way to append an image or text to an image that is downloaded?

java - 在非 native 应用程序中将号码添加到 iPhone 或 Android 手机联系人列表

javascript - 如何使用按钮在 div 之间切换?