函数头部的 JavaScript 变量声明

2024-02-17

有人告诉我,javascript 变量应该全部出现在函数中使用之前,例如:

function contrived() {
  var myA, myB;

  myA = 10;
  myB = 20;

  return myA + myB;
}

优先于:

function furtherContrivance() {
  var myA = 10;
  var myB = 20;

  return myA + myB;
}

是这样吗?为什么是这样?


我想有些人可能更喜欢前一种风格,因为这就是它的内部运作方式。所有局部变量在函数的整个生命周期中都存在,即使您使用var在函数中间声明它们。

稍后在函数中声明变量并没有什么问题,就语法而言,它可能只是令人困惑,因为变量将存在于声明它们的行之前。因此这个函数:

function bar() {
    alert(foo); // Alerts "undefined". Not an error because the variable does exist.
    var foo = 10;
    alert(foo); // Alerts the value 10.
}

相当于这样:

function bar() {
    var foo;
    alert(foo);
    foo = 10;
    alert(foo);
}

另一个相关的事实是嵌套函数定义(使用完成function foo() { ... }) 也会被移动到包含函数的顶部,因此即使调用它们的代码位于它们之前,它们也将可用。

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

函数头部的 JavaScript 变量声明 的相关文章

随机推荐

  • ' -A gnused 的等效 shell.nix 是什么' aria-label='nix-shell '' -A gnused 的等效 shell.nix 是什么'> nix-shell '' -A gnused 的等效 shell.nix 是什么

    我正在尝试探索 gnu sed 代码库 我可以从命令行执行此操作 nix shell
  • 添加联系人到 SIM 卡

    我正在尝试将联系人添加到 SIM 卡 它们似乎已添加到 SIM 卡 但只有在重新启动设备后才可见 即使是本机联系人应用程序 这是我正在使用的代码 final Uri uri Uri parse content icc adn Content
  • MySQL/SQLite/etc 数据库之间的区别?

    这是我第一次尝试使用数据库 所以请耐心等待 我需要编写一个程序来使用我还无法访问的数据库 我知道有 MySQL SQLite 和一堆其他 SQL 东西 但我不确定它们之间有什么区别 在使用它之前我是否需要知道它是什么类型的数据库 即 MyS
  • 使用 Swift 在 Xcode 中进行异步 UI 测试

    我正在编写一个发出大量网络请求的应用程序 像往常一样 他们是 async 即请求方法的调用立即返回并且结果 通过委托方法或在延迟一段时间后在闭包中传递 现在 在我的注册屏幕上 我向后端发送了一个注册请求 并且 想要验证请求完成时是否显示成功
  • Android:在列表视图周围绘制自定义边框?

    我有一个 ListActivity 其中有一个 ListView 我需要在边框周围绘制一个重复图像 在它的顶部 我猜是在渲染列表视图之后 我如何为此挂钩自己的绘图代码 您可以使用 FrameLayout 使 ListView 与填充整个屏幕
  • json 显示 mysql 结果的重复输出

    我正在尝试打印 json encode 并且输出重复 我确信数据库中有一条记录 但它以不同的格式两次显示相同的记录数据 就是这个 0 Polo name Polo 1 City location City 2 Manama city Man
  • Devise 在更改密码后注销用户

    我正在使用设备 当用户更改密码时 网站会将其注销 我在网上读到添加sign in可以解决问题 但不起作用 并且当密码更改时用户会被注销 这是我的代码 if user errors base empty and user update att
  • 如何在.NET 6 上的程序文件中使用启动类?

    我正在开发 ASP NET Core 2 2 Web 应用程序 将我的应用程序升级到 NET 6 时遇到一些问题 我的问题是没有startup NET 6 0 中的类 我发现program cs仅文件 我在网络应用程序中添加了启动类 但我不
  • 如何更改根视图控制器

    I want to change the rootViewController after the authenticationViewController IBAction LoginButtonPushed id sender if V
  • 在 SQLite 中启用外键约束

    我将 SQLite 与 C 结合使用 并定义了一些定义了外键的表 现在 我知道默认情况下 SQLite 中不强制执行外键约束 但我想将它们打开 是否可以通过代码来做到这一点 我查了相关的question https stackoverflo
  • Rust 中可以使用全局变量吗?

    我知道一般来说 应该避免使用全局变量 尽管如此 我认为从实际意义上来说 有时需要使用它们 在变量是程序不可或缺的情况下 为了学习 Rust 我目前正在使用 sqlite3 和 GitHub 上的 Rust sqlite3 包编写一个数据库测
  • ADB 驱动程序和 Windows 8.1

    我浪费了很多时间试图在 Windows 8 1 中为我的平板电脑成功安装 ADB 驱动程序 所以在这里我将发布我所做的 以防有人遇到同样的问题 UPDATE 发布图片 英文版 https ivanrf com en adb driver a
  • 实时服务器未加载 css 文件

    我有一个与我的 html 文件链接的 css 文件 通过实时服务器加载 html 文件时 我的 css 不起作用 直接通过浏览器打开html文件时 css工作正常 我的 css 文件位于 html 文件所在的目录之外 当我的 npm 脚本使
  • 输入密码时隐藏/替换 (C#)

    好的 我是 C 新手 但已经学到了一些东西 但我有一个问题 如何用 替换在控制台中输入的字符或完全隐藏它们 var pw eric123 Console WriteLine Password var value Console ReadLi
  • Fabric 插件:存档打包错误:-6 重新签名应用程序以进行分发时出错

    当我尝试使用 Fabric 插件上传新版本时 出现以下错误 存档打包错误 6重新签署分发应用程序时出错 usr bin codesign sign 937558639C8878BB6E161112505FA2965804A6AE all a
  • Python-解析字符串并将其转换为时间戳[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我有下一种格式的字符串 2017 02 14T09 51 46 000 0600 解析字符串并将其转换为时间戳的最佳方法是什么 我可以选择使用正
  • 是否可以克隆 .NET 流?

    我们可以克隆 Stream 吗 不 流通常引用某种类型的本地资源 套接字 文件句柄等 因此它们无法被克隆或序列化 此外 许多流是只进的 不支持查找 因此您甚至可能无法从流中重新读取 不过 您可以从可读流中将其复制到可以作为字节数组移动的 M
  • 如何将表达式树保存为新的可执行磁盘文件的主入口点?

    我正在尝试将表达式树导出到 PE 程序集作为主要入口点 我通过构建表达式树获得了 Lambda 表达式 例如 using System Linq using System 1 use expression trees to create a
  • UIColor(named:) 在 iOS 11.0-11.2 上始终返回 nil

    我有一个类从我的自定义调色板返回 UIColor 我以编程方式调用它 但当我在 iOS 11 上测试它时 它总是返回一个nil结果 我在多个设备和操作系统版本 11 0 11 0 1 11 2 上尝试过此操作 所有这些都返回nil 但一旦我
  • 函数头部的 JavaScript 变量声明

    有人告诉我 javascript 变量应该全部出现在函数中使用之前 例如 function contrived var myA myB myA 10 myB 20 return myA myB 优先于 function furtherCon