JSHint的“函数声明不应该放在块中”太宽泛了吗?

时间:2014-04-13 06:36:33

标签: javascript function block jshint

我理解为什么把函数声明放在CONDITIONAL块中是不好的,但是有没有理由建议不要在独立块中放置一个函数声明(除了可能导致混淆的参数之外)因为JS不是块范围的):

{
   function foo() {};
}

我这样做的原因是为了在Sublime Text中实现代码的任意部分代码折叠。

1 个答案:

答案 0 :(得分:8)

不,它不是“广泛的”。这是语言语法。您上面的代码会导致未指定的行为,并可能在不同的引擎中出现不一致。它在大多数引擎中都可以像你期望的那样工作,但是ECMAScript的特定条件禁止它的语法。

改为使用表达式:

{
   var foo = function(){}; // legal ECMAScript, unlike the declaration
}

引用带注释的规范:

  

注意:已知几种广泛使用的ECMAScript实现支持将FunctionDeclaration用作Statement。 然而,在应用于此类FunctionDeclarations的语义中的实现之间存在显着且不可调和的变化。由于这些不可调和的差异,使用FunctionDeclaration作为Statement会导致代码在实现中无法可靠地移植。建议ECMAScript实现不允许使用FunctionDeclaration或在此类用法时发出警告遇到。 ECMAScript的未来版本可以定义用于在Statement上下文中声明函数的替代可移植方法。   改为使用带有函数表达式的变量。

对于sublime文本,您可以折叠带注释的注释,例如。