搜索 JSLint 错误“在它被定义之前被使用”我发现了这些:
- JSLint: Using a function before it's defined error
- Function was used before it was defined - JSLint
- JSLint: was used before it was defined
- jsLint error: “somefunction() was used before it was defined”
- jslint - Should we tolerate misordered definitions?
问题
这些答案都没有为什么显示错误。
阐述
根据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/