搜索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似乎认为最好在使用它的代码之前声明每个函数,而不管提升效果如何.
根据他在question的StackOverflowNewbie,这引发了一些代码组织问题.更不用说像我这样的人喜欢在main / init代码下声明他们的功能.
在这些问题上,有一些方法可以避免或修复错误,例如使用函数表达式和函数声明.但他们都没有告诉我错误的原因.甚至没有Crockford’s site.
问题(S)
为什么在声明之前调用函数是错误的,即使它是使用function关键字声明的?
在JSLint上下文中使用函数表达式而不是函数声明更好吗?如果首选,为什么?
注意
不寻找像这样的答案:
>克罗克福德是一个暴君
>只是克罗克福德的意见
谢谢 :*