Javascript - 提升的优先级

2024-02-04

在提升中,变量优先于函数定义还是反之亦然?请看下面的代码:

function a()
{
    var x = 10;

    function x() {
        return 20;
    }

    return x;
}

这不是一个优先于另一个的问题(存在优先级,但这在很大程度上只是语义问题)。

这里重要的是变量声明的赋值部分是not提升,而整个函数定义is.

函数在变量声明之前被提升,但最终效果是相同的。

提升后,您的函数将如下所示:

function a()
{
    var x = function x() {  // hoisted function declaration/definition
        return 20;
    };
    var x;                  // hoisted variable declaration
    x = 10;                 // unhoisted part of variable declaration
    return x;
}

the x = 10发生在所有提升完成之后,因此这就是保留在中的值x.


To respond to @thefourtheye's request (I think this is what s/he is asking for), if your original function looked like this:
function a() {
    function x() {
        return 20;
    }
    var x = 10;
    return x;
}

那么吊装之后就变成这样了(同上):

function a() {
    var x = function x() {  // hoisted function declaration/definition
        return 20;
    }
    var x;                  // hoisted variable declaration (does nothing)
    x = 10;                 // unhoisted variable assignment
    return x;
}

最后一个例子,试试这个:

function a() {
    console.log(x);
    var x = 10;
    console.log(x);
    function x() { return 20; };
}

调用时,会打印出:

function x() { return 20; }
10

原因是提升导致函数的行为如下:

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

Javascript - 提升的优先级 的相关文章

随机推荐

  • CURRENT_TIMESTAMP 和 GETDATE() 之间的区别[重复]

    这个问题在这里已经有答案了 有什么区别CURRENT TIMESTAMP and GETDATE 在 SQL Server 中 SELECT CURRENT TIMESTAMP GETDATE CURRENT TIMESTAMP是一个 AN
  • “标记”SVN 导出并进行修订

    我正在寻找以下情况的解决方案 我们使用 Subversion 除了使用签出的开发环境之外 我们还有一个测试环境 它应该尽可能类似于生产环境 因此 我们现在已将其设置为使用 SVN 导出来更新环境 但是 由于我们只想要最新版本 因此我们不知道
  • 如何在应用程序中将 NPM 模块与 Django 一起使用?

    我有一个包含 2 个应用程序的 Django 项目 我想在其中一个应用程序中使用 Notion API 因此我必须安装它的 NPM 模块 但是 我从未使用过 NPM 或捆绑器 我知道我必须使用一个用于导入语句 我不知道该怎么做 我应该在哪里
  • 如何始终在 api 平台 GET 操作中过滤特定字段值的集合?

    在 GET 操作中 我想从返回的集合中排除具有等于 true 的 archive 字段的实体 我希望它成为我的端点 例如 users 或 companies 的默认值 并且我想避免手动添加 URL 过滤器 例如 users filter a
  • boost::noncopyable 的 unordered_map 无法从操作符[]返回引用

    为了演示我的问题 请考虑这个无法编译的简单程序 include
  • 跨集群访问日志

    我有一个包含 3 个节点的集群 我已经配置了应用程序服务器的数据库 我想知道集群中各主机生成的访问日志是否相同 或者每个主机都有一个单独的 访问日志 用于记录对其主机的请求 我知道集群中的每个主机都维护自己的审核日志文件 访问日志的工作方式
  • 列表视图中的所有内容都会扩展到屏幕宽度。我可以改变这一点吗?

    我正在尝试为我正在制作的应用程序设计聊天屏幕 为了使其可滚动 我将所有聊天消息放置在列表视图中 但是我放置在列表视图中的所有内容都会水平扩展以匹配屏幕宽度 Listview 小部件的宽度 我可以关闭此功能 以便可以将我的聊天消息排列到一侧
  • 强制元类的只读属性

    是的 还在继续有了这个 https stackoverflow com questions 70729700 enforcing single instances from the metamodel 我的印象是 Raku 有这个强大的功能
  • 如何在 php 中安装 posix

    当我运行时 POSIX 没有出现php m cmd 然而 我从phpinfo enable posix shared在装有 Plesk 9 的 Linux 上 基本上我无法使用posix 功能如所述http www php net manu
  • 如何扩展pyserial的输入缓冲区大小

    我想通过串口与手机通信 向手机写入一些命令后 我使用了ser read ser inWaiting 得到它的返回值 但我总是得到总数1020 bytes字符 实际上 期望的回报应该已经结束50KB 我尝试过设置ser read 50000
  • 检测由 Tab 键启动的焦点?

    我想检测元素的焦点事件 但前提是该事件是由用户按 Tab 键启动的 例如
  • 什么更快?运行空函数或检查函数是否未定义? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在编写一些代码 其中作为参数传入的函数有时可能是未定义的 我很好奇这是一种不好的 做法 我想知道什么实际上更快 给出一个空函数 或者让函数检
  • 显示“No Javascript”div,但不向 google / facebook 共享服务显示

    我想在网站顶部附近显示一个 div 以建议未启用 JavaScript 的访问者启用 JavaScript 我想我已经通过使用 noscript 标签找到了一个好方法 不幸的是 我发现这个解决方案不太理想 因为谷歌的索引器和 Faceboo
  • Oracle - 使用存储过程创建文本文件

    需要有关在 Oracle 10 中使用存储过程创建文本文件的帮助 我对此很陌生 所以请从头开始指导我 我找到了代码并将其创建为存储过程 我运行它并且它是有效的 但我执行了它 我得到了错误 INVALID FILE NAME AT SYS U
  • jQuery 动画 div 大小

    我有一个具有隐藏可见性的 div 我将数据库中的文本放入该 div 中 因此不知道它的高度 我想做的是制作一个动画 该动画会增加该 div 的大小 直到所有文本都可见 到目前为止我所拥有的是这样的 function display form
  • 每种方法的 ASP.NET WebAPI 支持的媒体类型

    给定控制器中的一个方法 public class CustomerController ApiController HttpGet public CustomerDto GetById FromUri int id return custo
  • 关于 iPhone 的 Cocoa/Objective-C 命名约定的问题(关于发布和自动发布)

    您能否描述返回为调用者分配的对象 调用者应释放的对象 的方法与返回自动释放对象的方法之间的命名约定差异 返回保留对象 调用者应释放该对象 的方法应包含单词copy new mutableCopy or alloc 如在alloc init一
  • Apache DBUtils - 存储过程

    apache dbutils库是否可以调用oracle存储过程 Yes QueryRunner run JDBCConnectionFactory getQueryRunner database Connection conn run ge
  • phantomjs exit() 不会终止进程

    我在 Windows 7 上使用 phantom js 已经有一段时间了 我认为 v1 4 0 是我使用的第一个版本 一切都很好 但由于某种原因 当调用 phantom exit 时 该进程不再正确终止 我绝对不知道为什么 这个问题从v1
  • Javascript - 提升的优先级

    在提升中 变量优先于函数定义还是反之亦然 请看下面的代码 function a var x 10 function x return 20 return x 这不是一个优先于另一个的问题 存在优先级 但这在很大程度上只是语义问题 这里重要的