Function Declarations Within Blocks according to the Google JavaScript style guide

后端 未结 1 901
失恋的感觉
失恋的感觉 2020-12-06 08:06

According to the Google JavaScript style guide, function declarations should not be declared within blocks since this is not a part of ECMAScript. However, I\'m not entirely

相关标签:
1条回答
  • 2020-12-06 08:44

    A function is not a block. A block is (for example) what follows a while, for, or if.

    First, understand that function declarations (function foo() {}) are hoisted to the top of the scope of their containing function (i.e., you can access a declared functions by name anywhere in the same scope as the declaration).:

    foo();
    function foo() { }
    

    This out-of-order code is 100% legal because the declaration of foo is hoisted to above the foo() invocation. However, now imagine you have a conditional declaration:

    if(false) {
        function foo() { }
    }
    

    From a language-design perspective, should foo be hoisted? The program flow will never enter the block, but we customarily hoist all declarations. Due to this confusion, declarations inside blocks are not part of the grammar defined by the ECMAScript spec (though each implementation does support this grammar, but causes a different, nonstandard effect in each).

    Having a function inside another function does not carry this confusion:

    function bar() {
        function foo() { }
    }
    

    It's obvious that foo will be hoisted to the top of bar (whenever it runs).

    Thus, your first example is perfectly fine.

    0 讨论(0)
提交回复
热议问题