搜索 JSLint 错误“在定义之前使用”我发现了这些:
- JSLint:在定义错误之前使用函数 https://stackoverflow.com/questions/806163/jslint-using-a-function-before-its-defined-error
- 函数在定义之前就被使用 - JSLint https://stackoverflow.com/questions/12963161/function-was-used-before-it-was-defined-jslint
- JSLint:在定义之前使用 https://stackoverflow.com/questions/9621162/jslint-was-used-before-it-was-defined
- jsLint 错误:“somefunction() 在定义之前被使用” https://stackoverflow.com/questions/7425147/jslint-error-somefunction-was-used-before-it-was-defined
- jslint - 我们应该容忍错误的定义吗? https://stackoverflow.com/questions/6744692/jslint-should-we-tolerate-misordered-definitions
Problem
这些答案都没有WHY显示错误。
阐述
根据ECMA-262 规范 http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf函数在执行开始之前进行评估,因此所有使用function
关键字可用于所有独立于声明它们的位置的代码(假设它们在该范围内可访问)。
这也称为hoisting.
Douglas Crockford 似乎认为最好在使用每个函数的代码之前声明它,而不管它的函数是什么hoisting effect.
根据StackOverflow 新手 https://stackoverflow.com/users/253976/stackoverflownewbie in his question https://stackoverflow.com/questions/7425147/jslint-error-somefunction-was-used-before-it-was-defined,这会引发一些代码组织问题。更不用说有些人,比如我,更喜欢在 main/init 代码下声明他们的函数。
对于这些问题,有一些方法可以避免或修复错误,例如使用函数表达式与函数声明。但他们都没有告诉我错误的原因。甚至不克罗克福德的网站 http://javascript.crockford.com/code.html.
问题)
Why在声明之前调用函数是否错误,即使它是使用function
关键词?
在 JSLint 上下文中使用函数表达式而不是函数声明是否更好?如果首选其中之一,为什么?
Note
Not寻找类似的答案:
谢谢 :*
这不是一个错误(毕竟你的代码确实有效)。与此相关的问题是,在使用函数后声明函数会降低代码的可读性。阅读您的代码的人可能会认为该函数是在外部作用域中的某个位置声明的。如果您覆盖流行的函数/构造函数,例如Date
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)