为什么ReSharper警告函数在声明之前使用?

时间:2015-06-30 14:42:22

标签: javascript resharper-9.0

我编写的JavaScript代码的布局如下所示:

function MyObject() {
    this.doSomething(){
        someSubRoutine();
    }

    function someSubRoutine(){
        //Sub-routine code here
    }
}

ReSharper警告我

  

在声明

之前使用'someSubRoutine'函数

确实在声明函数之前使用了该函数,但ReSharper是否建议我在使用之前声明我的函数?我认为由于JavaScript的提升能力,这不会是一个问题。我应该遵循这个建议还是继续忽略它?

1 个答案:

答案 0 :(得分:5)

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

问题归结为一个名为" hoisting"的主题,已经过大量讨论(例如,Sitepoint)。在某些情况下,在JS解释器有机会声明它之前使用方法或变量是可能的......所以"最佳实践"是在第一次使用之上声明某个地方。

修改 以下是吊装可能导致意外副作用的示例:

var showState = function() {
    console.log("Idle");
};

function showState() {
  console.log("Ready");
} 

showState();            // output: Idle

这是因为JS解释器在运行时使用hoisting来创建以下内容:

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