在我的项目中(仅限浏览器上下文)我想使用JS代码质量工具。我已经尝试了jslint
和eslint
。我希望linter帮助我使我的代码干净,清晰,错误并提高其整体质量。我不想做的是我不想写一些肮脏的黑客或使用不良做法只是为了让傻瓜高兴。
我只关心一个问题。他们都报告了我在定义之前使用函数的问题。显然,在以下代码片段bar
在其定义之前不会被调用。
function foo() {
bar();
}
function bar() {
}
foo();
在这个最简单的场景中,我可以在bar
之前移动foo
。但有些情况下,这是不可能的。第一个函数使用第二个函数,第二个函数使用第三个函数,第三个函数使用第一个函数。
似乎我可以通过在他们的定义之前声明所有功能来使快乐变得快乐。
var foo;
var bar;
foo = function() {
bar();
};
bar = function() {
};
foo();
问题是:
yes
我应该坚持这种做法,那不是吗?no
有关此问题的良好做法是什么?答案 0 :(得分:2)
不,这些片段没有被破坏,但也没有最佳实践。
var foo = function(){
}
var bar = function(){
foo();
}
bar();
实际上会成为:
var foo, bar;
foo = function(){
}
bar = function(){
foo();
}
bar();
因此,您应该在范围的开头定义所有变量和函数。 JavaScript使用Hoisting
它有效地将变量和函数的所有声明移动到范围的顶部。
自己做这件事被认为是最佳做法,并提高了可读性。
Eslint将检查已定义并记录的{strong> vars-on-top 规则here
https://www.reddit.com/r/learnjavascript/comments/3cq24a/crockford_says_hoisted_variable_declarations_are/ https://www.sitepoint.com/demystifying-javascript-variable-scope-hoisting/
答案 1 :(得分:1)
始终使用严格模式。 "use strict"
让你在像IIFE这样的范围内运行,因为没有全局变量
function foo() {
bar();
};
function bar() {
};