gpt4 book ai didi

javascript - 根据 Google JavaScript 风格指南的 block 内函数声明

转载 作者:数据小太阳 更新时间:2023-10-29 05:41:22 27 4
gpt4 key购买 nike

根据 Google JavaScript 风格指南,函数声明不应在 block 内声明,因为这不是 ECMAScript 的一部分。但是,我并不完全清楚什么才算是 block 。

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

一些好的措施代码:

错误(?)

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.'); };
}

最佳答案

函数不是 block 。 block 是(例如)whileforif 之后的内容。

首先,了解函数声明(function foo() {})被提升到它们包含的函数范围的顶部(即,您可以访问在与声明相同的范围内的任何地方按名称声明函数。:

foo();
function foo() { }

这个乱序代码是 100% 合法的,因为 foo 的声明被提升到 foo() 调用之上。但是,现在假设您有一个条件声明:

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

从语言设计的 Angular 来看,是否应该提升 foo?程序流永远不会进入 block ,但我们习惯上提升所有声明。由于这种混淆, block 内的声明不是 ECMAScript 规范定义的语法的一部分(尽管每个实现都支持此语法,但在每个实现中都会产生不同的、非标准的效果)。

在另一个函数中包含一个函数不会带来这种混淆:

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

很明显 foo 将被提升到 bar 的顶部(无论何时运行)。

因此,您的第一个示例非常好。

关于javascript - 根据 Google JavaScript 风格指南的 block 内函数声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17409945/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com