根据Google JavaScript风格指南在块内的函数声明

根据谷歌JavaScript风格指南,函数声明不应在块内声明,因为这不是ECMAScript的一部分。 然而,我不完全清楚什么是一个区块。

具体来说,我有一个构造函数,我想在该构造函数的范围内定义一个函数。 这是否会作为块内的函数计算,因为它在一组{?}内。 如果是这样,这是否意味着每个函数声明都必须是全局的?

一些代码的好处:

错误(?)

function Constructor() {
    function Shout () { alert('THE BEST UX IS IN ALL CAPS.'); }
}

对 (?)

function Constructor() {
    var Shout = function () { alert('THE BEST UX IS IN ALL CAPS.'); };
}

函数不是块。 A嵌段是(例如)下文一个whilefor ,或if

首先,明白函数声明( function foo() {} )被提升到它们包含函数范围的顶部(也就是说,你可以在与声明相同范围内的任何地方通过名字访问声明的函数):

foo();
function foo() { }

该乱序代码是100%合法的,因为foo的声明被提升到foo()调用的上方。 但是,现在想象你有一个条件声明:

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

从语言设计的角度来看,应该foo被吊起? 程序流程永远不会进入该块,但我们习惯性地提升所有的声明。 由于这种混淆,块内的声明不是ECMAScript规范定义的语法的一部分(虽然每个实现都支持这种语法,但在每个语法中都会产生不同的非标准效果)。

在另一个函数内部有一个函数不会带来这种困惑:

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

很明显, foo会被吊到bar的顶部(每当它运行时)。

因此,你的第一个例子非常好。

链接地址: http://www.djcxy.com/p/341.html

上一篇: Function Declarations Within Blocks according to the Google JavaScript style guide

下一篇: Undo a Git merge that hasn't been pushed yet