为什么 ReSharper 在函数声明之前警告它已被使用?
Why does ReSharper warn a function is used before it is declared?
我已经编写了 JavaScript 代码,其布局如下所示:
function MyObject() {
this.doSomething(){
someSubRoutine();
}
function someSubRoutine(){
//Sub-routine code here
}
}
ReSharper 警告我
Function 'someSubRoutine' is used before it is declared
确实函数在声明之前就已使用,但 ReSharper 建议我在使用之前声明我的函数是否有实际原因?我认为由于 JavaScript 的提升能力,这不会成为问题。我应该遵循此建议还是继续忽略它?
ReSharper 可能在后台使用 JSLint(或 JSHint),这些 linting 工具通常会警告这种做法。
问题归结为一个名为 "hoisting" 的主题,该主题已被广泛讨论(例如,Sitepoint)。在某些情况下,在 JS 解释器有机会声明它之前使用方法或变量是可能的......所以 "best practice" 是在第一次使用之上的某个地方声明。
编辑:
这是一个示例,其中提升会导致可能的意外副作用:
var showState = function() {
console.log("Idle");
};
function showState() {
console.log("Ready");
}
showState(); // output: Idle
这是因为 JS 解释器在运行时使用提升来创建以下内容:
function showState(){ // moved to the top (function declaration)
console.log("Ready");
}
var showState; // moved to the top (variable declaration)
showState = function(){ // left in place (variable assignment)
console.log("Idle");
};
showState();
我已经编写了 JavaScript 代码,其布局如下所示:
function MyObject() {
this.doSomething(){
someSubRoutine();
}
function someSubRoutine(){
//Sub-routine code here
}
}
ReSharper 警告我
Function 'someSubRoutine' is used before it is declared
确实函数在声明之前就已使用,但 ReSharper 建议我在使用之前声明我的函数是否有实际原因?我认为由于 JavaScript 的提升能力,这不会成为问题。我应该遵循此建议还是继续忽略它?
ReSharper 可能在后台使用 JSLint(或 JSHint),这些 linting 工具通常会警告这种做法。
问题归结为一个名为 "hoisting" 的主题,该主题已被广泛讨论(例如,Sitepoint)。在某些情况下,在 JS 解释器有机会声明它之前使用方法或变量是可能的......所以 "best practice" 是在第一次使用之上的某个地方声明。
编辑: 这是一个示例,其中提升会导致可能的意外副作用:
var showState = function() {
console.log("Idle");
};
function showState() {
console.log("Ready");
}
showState(); // output: Idle
这是因为 JS 解释器在运行时使用提升来创建以下内容:
function showState(){ // moved to the top (function declaration)
console.log("Ready");
}
var showState; // moved to the top (variable declaration)
showState = function(){ // left in place (variable assignment)
console.log("Idle");
};
showState();