在寻找JSLint错误“在定义之前使用”时,我找到了以下内容:
- JSLint:使用函数之前的定义错误
- 函数在定义之前被使用-JSLint
- JSLint:在定义之前使用
- jsLint错误:“somefunction()在定义之前被使用”
- jslint-我们应该容忍无序定义吗?
问题
这些答案都没有说明为什么会出现这个错误。
详细说明
根据 ECMA-262规范,在执行开始之前,函数将被评估,因此使用 function
关键字声明的所有函数都可用于所有代码,而与它们声明的位置无关(假设它们在该范围内是可访问的)。
这又被称为提升。
道格拉斯·克罗克福德似乎认为最好在使用它的代码之前声明每个函数,而不管提升效果如何。
根据 StackOverflowNewbie 在他的问题中,这引起了一些代码组织问题。更不用说有些人,比如我,更喜欢在主/初始化代码下声明他们的函数。
在这些问题中,有一些避免或修复错误的方法,例如使用函数表达式vs函数声明。但是没有一个人向我展示了错误的原因。甚至没有 Crockford的网站。
问题
为什么在声明之前调用函数是一个错误,即使它使用 function
关键字声明?
在JSLint上下文中,使用函数表达式而不是函数声明更好吗?如果有一个首选项,为什么?
注意
不要提供以下答案:
- Crockford 是一个暴君
- 这只是 Crockford 的观点
谢谢 :*