首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >嵌套函数Javascript

嵌套函数Javascript
EN

Stack Overflow用户
提问于 2013-02-14 23:38:30
回答 1查看 663关注 0票数 8

在Javascript函数中,是否需要将嵌套函数定义为函数表达式,或者函数体中是否允许函数声明?例如,像这样的东西会符合吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function a() {
    function b() {
        function c() {
            window.alert(3);
        }
        window.alert(2);
    }
    window.alert(1);
}

还是你要做这样的事?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function a() {
    var a = function () {
        var c = function () {
            window.alert(3);
        }
        window.alert(2);
    }
    window.alert(1);
}

ECMA-262说:

已知有几个广泛使用的ECMAScript实现支持使用FunctionDeclaration作为语句。但是,在应用于此类FunctionDeclarations的语义方面,实现之间存在着重要且不可调和的变化。由于这些不可调和的差异,使用FunctionDeclaration作为语句会导致代码在实现中无法可靠地移植。建议ECMAScript实现不允许这种使用FunctionDeclaration,或者在遇到这种使用时发出警告。ECMAScript的未来版本可以定义在语句上下文中声明函数的可选可移植方法。

这是否意味着函数体中的函数声明在技术上是不正确的,还是我完全错了?我听说人们把身体称为块,按照标准,它是一个或多个陈述,但我不确定。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-15 05:25:14

功能声明在函数体中当然是允许的,并且没有我所知道的bug。

一旦你看了ES5 production rules,一切都很清楚

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FunctionBody
  SourceElements (opt)

SourceElements
  SourceElement
  SourceElements SourceElement

SourceElement
  Statement
  FunctionDeclaration

换句话说,函数体包括源元素,源元素要么是语句,要么是FunctionDeclaration。因此,FunctionDeclaration可以是函数体的一部分。

您提到的关于“ECMAScript的.实现.支持使用FunctionDeclaration作为语句”的子句指的是将FunctionDeclaration用作语句,而不是直接在函数体中使用。它指的是这样的案件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (...) {
  function f () {}
}

这是一种不规范的行为。查看有关这些function statements的更多信息。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14890138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文