【问题标题】:JSlint - 'function' was used before it was defined'JSlint - '函数'在定义之前使用'
【发布时间】:2014-06-07 14:23:45
【问题描述】:

我刚刚开始使用 JSlint 来看看我是否可以改进我的代码。它相当...迂腐但非常有用。

我目前遇到一个问题,即调用了一个函数,但 jslint 告诉我它尚未定义。

该函数是一个简单的生成随机数函数,它存储在一个通用的“帮助文件”中。我不想或看到有必要将此函数复制到调用它的每个文件中,这有点违背了帮助文件的目的:)

我还有什么遗漏的吗?我不禁认为我犯了一个业余错误,但看不到它。

此行出现错误:randomNum = random_num(layerDetails.length);

而random_num函数很简单:

function random_num($value) { $result = Math.floor(Math.random() * $value); return $result; }

感谢您的帮助。可以这么说,我希望 jslint 能给我一份干净的健康单。

【问题讨论】:

  • 在 JSLint 页面的底部,就在 Options 的下方,是一个白框。列出您在那里调用的任何外部或全局函数。顺便说一句,道格拉斯·克罗克福德(Douglas Crockford)有一些好主意,但并非所有的想法都是非黑即白的。您可能想看看JSHint 作为替代方案。
  • 嗯...我正在从终端运行它。 :) - 我正在使用节点扫描项目文件夹中的所有文件,是否有替代方法?
  • 您也可以简单地将所有 JS 文件连接在一起,然后 jsLint 连接的文件。这模拟了当浏览器在给定页面中加载所有脚本时发生的情况,这样您声明的所有函数将在它们实际在浏览器中可用时可用,因此 JSLint 可以获得更清晰的整体画面。
  • @jfriend00 - 这听起来像是一个理想的解决方案,并且可以避免将 jslint cmets 放在每个文件的顶部。请你解释一下怎么做?
  • 如果您只是偶尔这样做,您可以将它们全部复制/粘贴到编辑器中的临时主文件中(以正确的顺序)。如果您想要一个工具,有数百种用于连接 javascript 文件的工具(大多数还可以缩小您不需要的文件)。 YUI 压缩器就是其中之一,但您会在 Google 搜索“javascript 文件连接”时遇到数百个其他压缩器。

标签: javascript jslint


【解决方案1】:

你有一个全局函数,它也是一个全局变量。全局变量通常是一件坏事,因为它们会占用您的命名空间并导致命名冲突。

如果您不担心,可以通过在您 lint 的每个文件的顶部添加以下注释来让 JSLint 知道您正在使用哪些全局变量:

/*globals random_num, $ */

我添加了$ 以证明您可以提供全局变量列表。

但是,由于您使用的是 Node,我建议您将其添加到 Utils 模块中。 JSLint 不会抱怨这一点,因为您将使用 var 声明模块。

utils.js

module.exports = {
  random_num: function random_num($value) {
    $result = Math.floor(Math.random() * $value);
    return $result;
  }
};

其他地方:

var utils = require('./utils');
utils.random_num();

【讨论】:

  • 谢谢!我使用类似的方法来避免循环中的 ++ 问题。我知道全局变量是不好的,但是这个函数......当然最好将它放在一个全局可用的地方,而不是将它放在许多单独的文件中?你能解释一下 utils 模块是什么意思吗?
  • 通常最好将代码组织成模块。而且我总是试图以尽可能大的命名空间为目标,一般来说,它会降低在任何给定上下文中“用尽”变量名的可能性。
  • 添加了 utils 模块示例。
  • 谢谢!这很有帮助,我想我现在需要重构更多代码:D
  • JSlint 不喜欢 'globals' 顺便说一句。不知道为什么
猜你喜欢
  • 2012-10-09
  • 2010-10-22
  • 2012-03-26
  • 2017-07-18
  • 1970-01-01
  • 1970-01-01
  • 2013-12-18
  • 2013-08-17
相关资源
最近更新 更多