Chrome 和 Firefox 中的 Javascript 提升

2023-11-24

在 Chrome 和 Firefox 中运行它会给出不同的答案:

(function() {

        if(true) {
            function f() { alert("yes"); };
        } else {
            function f() { alert("no"); };
        }
        f();

    })();

在 Chrome 中,结果是“否” 在 Firefox 中,结果是“是”

为什么有区别?


在条件语句内声明函数是非标准的,所以不要那样做。这是一个已知问题。您可以使用函数表达式代替声明:

var f;
if(true) {
    f = function() { alert("yes"); };
} else {
    f = function() { alert("no"); };
}
f();

The 关于函数表达式的著名 Kangax 文章给出了一些额外的细节:

函数声明只允许出现在Program or 函数体。从句法上来说,他们不能出现在Block ({ ... })——比如if, while or for声明。这是因为Blocks只能包含声明, not 源元素, which 函数声明 is.

同一篇文章还说:

值得一提的是,根据规范,允许实现引入语法扩展(参见第 16 节),但仍完全符合要求。这正是当今许多客户所发生的情况。其中一些将块中的函数声明解释为任何其他函数声明 - 只需将它们提升到封闭范围的顶部;其他——引入不同的语义并遵循稍微复杂的规则。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Chrome 和 Firefox 中的 Javascript 提升 的相关文章

随机推荐

  • 指定相对路径

    我有一个 Windows 窗体项目 在当前目录中 我有一个包含 chm 文件的帮助文件夹 从应用程序启动它们的最简单方法是什么 我如何指定它们的相对路径 The 环境 当前目录属性将设置为 exe 文件的位置 因此 如果您将帮助文件夹放在那
  • Workmanager 在 Android 12 Android kotlin 中无法处理延迟

    嘿 我正在 kotlin 中工作 WorkManager 我不明白一些代码并给我带来了这个错误 有人能更详细地向我解释一下吗 2022 01 06 16 48 33 501 14483 14483 com example app E And
  • 用MySQL计算中位数的简单方法

    使用 MySQL 计算中位数的最简单 希望不会太慢 的方法是什么 我用过AVG x 寻找平均值 但我很难找到计算中位数的简单方法 现在 我将所有行返回给 PHP 进行排序 然后选择中间行 但肯定有一些简单的方法可以在单个 MySQL 查询中
  • 如何设置 Apache ProxyPass 以保留 Express 路由

    在我的 Apache 配置中 我转发所有流量 node到港口3000 Express 服务器正在侦听
  • 如何在 Bash 中转义单引号字符串中的单引号?

    我想在 Bash 中显示一个字符串 如下所示 I m a student 当然你可以这样做 echo I m a student 但是如何在字符串周围使用单引号来实现这一点呢 echo I m a student 不起作用 但以下有效 ec
  • DoCmd.DeleteObject acTable 与 DoCmd.DeleteObject acTable 之间有什么区别?掉落表

    Details 我有一个 MS Access 数据库过程 可以在数据库中本地创建表 但是 我想确保我创建的表经过测试 如果测试失败 我需要删除 删除已创建的其他表 我猜基本上是一个回滚过程 问题 我遇到了两种删除表的方法 但无法弄清楚其中一
  • android中从包名获取应用程序名称

    我正在尝试开发一个android应用程序 它可以列出所有具有缓存的应用程序 我成功地获取了有关缓存的信息 但现在我想在屏幕上显示那些具有缓存的应用程序 我有包名称 但是问题是如何从包名称中获取应用程序名称 假设包名称是com android
  • 如何将字典中的值添加到电子表格?

    我有一个模板电子表格文档 其中有两列 服务器名称和 IP 地址 如何填充电子表格 以便每个字典键位于 服务器 列中自己的单元格中 而相应的值位于 IP 列中它旁边的单元格中 我正在使用 EPPlus 库 但找不到有关该主题的任何内容 以下是
  • Django:如何使用子查询注释 M2M 或 OneToMany 字段?

    I have Order物体和OrderOperation代表订单操作 创建 修改 取消 的对象 从概念上讲 一个订单有一对多的订单操作 每次对订单进行操作时 都会在该操作中计算总计 这意味着当我需要查找订单的属性时 我只需使用子查询获取最
  • 如何查明“调试模式”是否已启用

    Java 程序如何知道它是否在调试模式下运行 应用程序在常规 全速 模式下的行为应与 调试模式 下 当连接调试器时 在调试模式下运行时 略有不同 应用程序通过 TCP 与另一台计算机 另一个进程或自身内部进行通信 我的同事希望我们使用Soc
  • 如何使用 Composer 安装 Zend Framework 2 Tool

    我不知道如何在使用 Composer 引导时运行 zf php Zend Framework 2 Tool 首先 我根据文档引导 Composer 和 zftool mkdir tmp cd tmp curl s https getcomp
  • docker-compose 在启动使用 create-react-app 创建的 React 应用程序后立即停止

    我正在尝试使用以下命令创建一个反应应用程序create react app所描述的工具here 我想用docker compose在 docker 容器内运行 React 应用程序 我已采取以下步骤 在我的机器上我创建了一个目录调用app并
  • 全局引用命名空间?

    有没有办法在整个解决方案中全局引用命名空间 因此 不要在每个代码文件中都包含这些行 using System using MyNamespace 只需声明一次 每个代码文件都会使用它们 顺便说一句 我正在使用 Visual Studio 不
  • 如何编译 Hive UDF

    我正在尝试编译这个 UDF package com dataminelab hive udf import org apache hadoop hive ql exec UDF import org apache hadoop io Tex
  • 在Python中接收16位整数

    我正在通过串行端口从硬件读取 16 位整数 使用Python 我怎样才能得到正确的LSB和MSB 并使Python明白它是我正在摆弄的16位有符号整数 而不仅仅是两个字节的数据 尝试使用struct module import struct
  • 如何将角度材料步进器步数更改为任何图标或文本?

    角度材料步进器对我来说有以下问题 我无法从文档中找到这些问题 如何显示任何字符串或 html 而不是步进索引 数字 怎么才能显示mat工具提示当鼠标悬停在任何垫子步骤上时 我正在使用最新版本材质 角 IO 不幸的是 现在不可能使用材料中的本
  • 云上的 Node.js TCP 套接字服务器 [Heroku/AppFog]

    可以在 Node js 上运行面向 TCP 套接字的应用程序Cloud 更具体地说Heroku or AppFog 它不会是一个 Web 应用程序 而是一个用于客户端程序访问的服务器 基本思想是利用Cloud 扩展和易于使用的平台 我知道这
  • jQuery 中文档就绪的不同方式?

    这些是同一件事吗 即表示文档准备就绪的方式 function and function jQuery 或者两者之间是否有区别 如果有那么我什么时候应该使用哪个 第一个是快捷方式 ready 第二个是无效的 因为您试图调用一个不可调用的对象
  • 使用 JavaScript 清除 HTML 页面

    有没有办法使用 JavaScript 函数删除页面上现有内容的部分内容 像这样 i i
  • Chrome 和 Firefox 中的 Javascript 提升

    在 Chrome 和 Firefox 中运行它会给出不同的答案 function if true function f alert yes else function f alert no f 在 Chrome 中 结果是 否 在 Fire