javascript – 为什么JSLint抱怨:“someFunction()在定义之前使用过”?

前端之家收集整理的这篇文章主要介绍了javascript – 为什么JSLint抱怨:“someFunction()在定义之前使用过”?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
搜索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似乎认为最好在使用它的代码之前声明每个函数,而不管提升效果如何.

根据他在questionStackOverflowNewbie,这引发了一些代码组织问题.更不用说像我这样的人喜欢在main / init代码下声明他们的功能.

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

问题(S)

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

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

注意

不寻找像这样的答案:

>克罗克福德是一个暴君
>只是克罗克福德的意见

谢谢 :*

解决方法

这不是错误(你的代码毕竟有效).对此的关注是在使用后声明函数会降低代码的可读性.阅读代码的人可能认为此函数在外部范围内声明.如果你覆盖像Date这样的流行函数/构造函数,这可能会特别令人困惑

猜你在找的JavaScript相关文章