我是javascript编程(和一般而言的脚本语言)的新手,但是当我出现语法错误或意外声明全局变量时,我一直在使用JS Lint来提供帮助。

但是,有一种JS Lint无法解决的情况,我觉得这非常方便。请参见下面的代码:

(function () {
    "use strict";
    /*global alert */

    var testFunction = function (someMessage) {
        alert("stuff is happening: " + someMessage);
    };

    testFunction(1, 2);
    testFunction();
}());

请注意,我将错误数量的参数传递给testFunction。在有意遗漏一个参数或添加一个这样的参数的情况下,我从未预见过自己。但是,JS Lint和JS Hint都不认为这是错误。

还有其他工具可以帮助我吗?还是有某些原因为什么不应该对传递这样的参数进行错误检查?

最佳答案

使用任何静态分析工具通常都不可能做到这一点。有几个原因:

  • 通常,JS函数可以接受任意数量的参数。
  • 大多数(全部?)短毛刺一次只能处理一个文件。他们对在其他文件中声明的函数一无所知
  • 无法保证作为函数调用的属性就是您期望的函数。请考虑以下代码段:
    var obj = { myFunc : function(a,b) { ... } };
    var doSomething(x) { x.myFunc = function(a) { ... }; };
    doSomething(obj);
    obj.myFunc();
    

  • 无法知道myFunc在调用doSomething之后现在需要使用不同数量的args。

    JavaScript是一种动态语言,您应该接受并接受它。

    建议您不要依赖于掉​​毛来捕获并非旨在解决的问题,我建议向执行检查的函数中添加前提条件。

    创建一个帮助函数,如下所示:
    function checkThat(expression, message) {
      if (!expression) {
        throw new Error(message);
      }
    }
    

    然后像这样使用它:
    function myFunc(a, b) {
      checkThat(arguments.length === 2, "Wrong number of arguments.");
    

    并且通过适当的单元测试,您应该永远不会在生产中看到此错误消息。

    关于javascript - 我可以防止使用JS Lint,JS Hint或其他工具将错误数量的参数传递给方法吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31195952/

    10-11 05:49