为什么ReSharper在声明函数之前会警告它被使用



我已经编写了布局如下的JavaScript代码:

function MyObject() {
    this.doSomething(){
        someSubRoutine();
    }
    function someSubRoutine(){
        //Sub-routine code here
    }
}

ReSharper警告我

函数"someSubRoutine"在声明之前已使用

的确,函数在声明之前就已经使用过了,但ReSharper建议我在使用之前声明函数是否有实际原因?我想,由于JavaScript的提升能力,这不会是个问题。我应该遵循这个建议还是继续忽略它?

ReSharper可能在后台使用JSLint(或JSHint),这些linting工具通常会警告这种做法。

这个问题可以归结为一个名为"吊装"的话题,这个话题已经被大量讨论(例如Sitepoint)。在某些情况下,在JS解释器有机会声明方法或变量之前,可能会使用该方法或变量……因此,"最佳实践"是在首次使用之前声明。

编辑:举个例子,吊装可能会造成意想不到的副作用:

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();

相关内容

  • 没有找到相关文章

最新更新