javascript - 为什么 JSLint 提示 : "someFunction() was used before it was defined"?

标签 javascript jslint hoisting

搜索 JSLint 错误“在它被定义之前被使用”我发现了这些:

问题

这些答案都没有为什么显示错误。

阐述

根据ECMA-262 Specification函数在执行开始之前进行评估,因此使用 function 关键字声明的所有函数对于声明它们的位置的所有代码都是可用的(假设它们在该范围内是可访问的)。

这也称为提升

Douglas Crockford 似乎认为最好在使用它的代码之前声明每个函数,而不管提升 效果如何。

根据 StackOverflowNewbie在他的 question ,这会引发一些代码组织问题。更不用说有些人,比如我,更喜欢在 main/init 代码下声明他们的函数。

关于这些问题,有一些方法可以避免或修复错误,例如使用函数表达式与函数声明。但是他们都没有告诉我错误的原因。甚至没有 Crockford's site .

问题

为什么在声明之前调用函数是错误的,即使它是使用function关键字声明的?

在 JSLint 上下文中使用函数表达式而不是函数声明更好吗?如果首选一个,为什么?

注意事项

不是寻找像这样的答案:

  • 克罗克福德是个暴君
  • 只是 Crockford 的意见

谢谢:*

最佳答案

这不是错误(毕竟您的代码确实有效)。与此有关的问题是,在使用函数后声明函数会降低代码的可读性。阅读您的代码的人可能认为此函数是在外部范围内的某处声明的。如果您覆盖像 Date

这样的流行函数/构造函数,这可能会特别令人困惑

关于javascript - 为什么 JSLint 提示 : "someFunction() was used before it was defined"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20786621/

相关文章:

JavaScript 文档符号

javascript - JSLint "JavaScript URL."错误

javascript - ES6 javascript block 作用域变量提升到 for header

javascript - 提升变量是否有目的?

javascript - Windows 环境和移动 Web 应用程序

javascript - Meteor.http 方法在服务器上未定义?

javascript - 压缩相似的函数

javascript - 将 html 标签添加到 JSLint

javascript - JSLint : Unexpected ']' in array of object

Chrome 和 Firefox 中的 Javascript 提升