JavaScript 提升函数与函数变量

2023-12-11

这是我的 JavaScript 代码:

    console.log(a);
    c();
    b();            
    var a = 'Hello World';
    var b = function(){
        console.log("B is called");
    }
    function c(){
        console.log("C is called");
    }

现在这里是输出:

undefined
hoisting.html:12 C is called
hoisting.html:6 Uncaught TypeError: b is not a function

我的问题是为什么 c() 和 b() 的行为不同。 b 应该抛出类似 b is not Defined 的错误。


函数声明将与其主体一起提升。

函数表达式不会,只有 var 语句会被提升。


这就是您的代码在编译后 - 运行时之前对解释器“看起来”的样子:

 var c = function c(){
      console.log("C is called");
 }

 var a = undefined
 var b = undefined

 console.log(a); // undefined at this point
 c(); // can be called since it has been hoisted completely
 b(); // undefined at this point (error)

 a = 'Hello World';
 b = function(){
     console.log("B is called");
 }

KISSJavaScript

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

JavaScript 提升函数与函数变量 的相关文章

随机推荐

  • UI 属性不包含某些键

    我有以下问题 我需要获取 UI 属性 UIManager getString OptionPane okButtonText 返回字符串 OK 并且它有效 但是 如果我迭代UIDefaults钥匙组 我从来没有拿到钥匙 OptionPane
  • 远程最小化机器 VBS 中的发送密钥

    我在 SAP 应用程序的对象中执行 Shift Enter 时遇到问题 这是我的代码 If Dialog SAP Logon 730 WinListView SysListView32 Exist 100 Then Dialog SAP L
  • 为什么我下载文件时有两个请求? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 目前不接受答案 我有一个提供文件的操作 public override FileContentResult Foo var someDataAsBytes return File someD
  • 使用 SDK 获取 Azure VM 的 IP

    我有一个已启动并在天蓝色中运行的虚拟机 我知道它的名称 但希望使用新的 C SDK 以编程方式检索其 IP 地址并避免使用 REST API 我怎样才能做到这一点 尝试这个 string subId deadbeef beef beef b
  • 在python中求一棵树的最大和

    我有一棵数字树 我希望能够找到数字之和 每个数字下面是左右两个孩子 在所有可能的路径中 我希望能够通过所有可能的路径找到最大的数字 这是一个例子 8 3 11 10 2 32 6 返回 8 11 32 51 我觉得这是一个递归问题 但我坚持
  • 快速卷积算法

    我需要对两个一维信号进行卷积 一个平均有 500 个点 这个是汉宁窗函数 另一个有 125000 个点 每次运行 我需要应用三倍的卷积运算 我已经有一个基于 scipy 文档运行的实现 如果您愿意 您可以在此处查看代码 前面是 Delphi
  • Pentaho数据集成Kettle转换中如何配置生产环境的数据库连接

    我设计了一个ktr文件进行转换 我需要配置生产环境的数据库连接详细信息 我怎样才能做到这一点 有什么建议么 我使用环境变量 KETTLE HOME KETTLE JNDI ROOT PATH PATH KETTLE HOME Kettle
  • Boost Signals2 自动连接管理和更改信号的互斥类型

    我正在尝试使用自动连接管理 and 更改信号的互斥类型对于模板函数 以下代码使用 gcc 4 3 4 可以正常编译和执行 http ideone com LLN6d include
  • Renci SSH.NET - 没有为 opmnctl 返回结果字符串

    我试图通过 VB NET 从命令获取结果 它返回空字符串 如下面的代码所示 Dim connInfo As New Renci SshNet PasswordConnectionInfo serverip user pass Dim ssh
  • IonRangeSlider 将标签分配给值

    我在用离子范围滑块我想为值分配标签 反之亦然 因此 用户可以通过以下选项选择距海滩的距离 on beach 100m 200m 300m more than 300m 但我需要post价值观像 0 100 200 300 999 My in
  • 通过一次导入 csv 将多个用户添加到多个组(后续查询)

    我一直在寻找一种使用多个用户名填充多个通讯组的方法 我碰到本网站上的脚本由成员 Frode F 编写 Import Csv C Scripts Import Bulk Users into bulk groups bulkgroups3 c
  • 如果没有明确设置一个巨大的常量值,是否可以期望被告知不要超时?

    我已将超时设置为一个愚蠢的高数字 有没有更好的方法告诉脚本不要超时 usr bin expect spawn telnet 10 10 10 10 set timeout 200000000 expect login send user r
  • iOS 15 中 UIButton 图像行为发生变化?

    我的代码很简单 我有一个 UIButton 的出口 button 我在代码中设置它的图像 let jack UIImage named jack png self button setImage jack for normal 问题是这并不
  • Cython C++ 包装器运算符() 重载错误

    与我之前的问题有关 使用 Cython 包装使用 OpenCV 类型作为参数的 C 类 现在我陷入了另一个错误 我的 OpenCV 类型 Matx33d 的 cython 包装代码如下所示 cdef extern from opencv2
  • Eclipse:运行时我们如何获取 main 参数

    在 Java 中 对于普通的 main 方法 public static void main String args code here String args用于从命令行获取一些参数 我可以通过以下方式从命令提示符运行此文件 javac
  • 为什么修改迭代变量不影响后续迭代?

    这是我遇到问题的 Python 代码 for i in range 0 10 if i 5 i 3 print i 我预计输出是 0 1 2 3 4 8 9 然而 翻译却吐槽道 0 1 2 3 4 8 6 7 8 9 我知道一个for循环在
  • 在 matlab 等高线图中选择特定水平

    我有这个plot我生成它是为了测试等值线图在 matlab 上的工作原理 我想弄清楚是否有一种方法可以只绘制其中一条线 但不一定是第一条线 Matlab 的解释是 如果你这样做 contour X Y Z 1 它会绘制其中一条线 但它始终是
  • Oracle SQL 对版本号进行排序

    在 Oracle 中 只需使用ORDER BY不对版本号进行排序 我的Version Number字段被声明为VARCHAR我无法改变它 例如 以下版本 1 20 1 9 1 18 1 13 1 5 1 11 2 0 1 8 1 3 1 2
  • 使用SFTP / RCurl创建远程目录

    是否可以使用 RCurl 包在 SFTP 站点上创建目录 我找到了sftp create dirs函数 但我找不到如何使用它的示例 我尝试设置ftp create missing dirs选项TRUE as in library RCurl
  • JavaScript 提升函数与函数变量

    这是我的 JavaScript 代码 console log a c b var a Hello World var b function console log B is called function c console log C i