定义JavaScript函数
在我的项目中(仅浏览器上下文),我想使用JS代码质量工具。我尝试了定义JavaScript函数,javascript,jslint,eslint,Javascript,Jslint,Eslint,在我的项目中(仅浏览器上下文),我想使用JS代码质量工具。我尝试了jslint和eslint。我希望linter帮助我使代码干净、清晰、防错,并提高其整体质量。我不想做的是,我不想写一些下流的文章,也不想用不好的做法来取悦林特斯 我只关心一个问题。他们都报告了一个问题,我在定义函数之前使用了它。显然,在下面的代码片段中,bar在定义之前不会被调用 function foo() { bar(); } function bar() { } foo(); 在这个最简单的场景中,我可以在
jslint
和eslint
。我希望linter帮助我使代码干净、清晰、防错,并提高其整体质量。我不想做的是,我不想写一些下流的文章,也不想用不好的做法来取悦林特斯
我只关心一个问题。他们都报告了一个问题,我在定义函数之前使用了它。显然,在下面的代码片段中,bar
在定义之前不会被调用
function foo() {
bar();
}
function bar() {
}
foo();
在这个最简单的场景中,我可以在foo
之前移动bar
。但在有些情况下,这是不可能的。第一个函数使用第二个函数,第二个函数使用第三个函数,第三个函数使用第一个函数
似乎我可以通过在定义之前声明所有函数来满足Linter的要求
var foo;
var bar;
foo = function() {
bar();
};
bar = function() {
};
foo();
问题是:
- 第一个代码段是否已损坏?我想——不是
- 第一个代码段容易出错吗?我想——也许吧
- 像第二个代码段那样组织代码(在定义函数之前声明函数)是一种好做法吗
- 如果
我应该坚持这种做法,不是吗是
- 如果
关于此问题的最佳做法是什么否
- 这个林特错误值得注意还是我应该禁用它
var foo = function(){
}
var bar = function(){
foo();
}
bar();
实际上将成为:
var foo, bar;
foo = function(){
}
bar = function(){
foo();
}
bar();
因此,您应该在范围的开头定义所有变量和函数。JavaScript使用提升
它有效地将变量和函数的所有声明移动到范围的顶部
自己动手做被认为是最佳实践,可以提高可读性
Eslint将对照已定义和记录的规则顶部变量进行检查
你试过在你的代码中切换
foo
和bar
的位置吗?@Justinas在这个最简单的场景中,我可以在foo之前移动bar。但在有些情况下,这是不可能的。第一个函数调用第二个函数,第二个函数调用第三个函数,第三个函数调用第一个函数。也许就我所知,第一个函数比第二个函数更安全。甚至连皮棉都怪他。原因是,在javascript中,函数只有在所有函数都已定义的情况下才会执行,因此只有在永远不会定义bar()时才会出现问题。在第二种情况下,可以在未定义bar()时执行它。只是因为在bar()定义之前调用了foo()。这是因为在第二种情况下,您将函数分配给变量,这些变量在声明/定义中具有不同的行为。我找到了规则的解释,这更详细地说明了我在上一篇文章中试图解释的内容。您可以研究一下,所以第二个代码片段被认为是一个很好的实践,对吗?关于提升,我不是专家,但在js中变量声明不会移动到范围的顶部,只有函数声明。示例:函数asd(){console.log('1:'+asdvar);var asdvar='sir asdalot';console.log('2:'+asdvar);}@kailnris声明被移动,而不是asignment;)@TimHallyburton是的,它是真的,在这个例子中,变量是在局部范围内创建的:function asd(){asdvar='asd2';var asdvar;}所以第二个代码片段被认为是一个好的实践,对吗?
我意识到我在重复我前面的注释,但不,不是真的。在这个简单的例子中,我认为没有理由不使用函数foo
和函数栏
。在实际情况中(a
调用b
,调用c
,调用a
)。。。JSLint是一个linter,并不是真正打算作为代码审查的替身,但它确实有助于识别代码气味。如果你有这样的乱伦电话,发现自己在执行奇怪的舞蹈以绕过规则,那么也要考虑一个全面的代码审查。正如您在他的编辑中所看到的,将声明放在代码段的顶部解决了问题。很可能eshint检查了“顶部的变量”(如我的答案中所链接的),我理解,但这是lint的选择问题,我猜:-)我宁愿不在顶部预先定义变量
function foo() {
bar();
};
function bar() {
};