JavaScript 变量提升解释

2023-12-03

我发现了以下关于 javascript 中变量提升的文章。文章总结了以下三点。

1. All declarations, both functions and variables, are hoisted to the top of the containing scope, before any part of your code is executed.
2. Functions are hoisted first, and then variables.
3. Function declarations have priority over variable declarations, but not over variable assignments.

站点点

var showState = function() {
  console.log("Idle");
};

function showState() {
  console.log("Ready");
} 

showState(); 

我知道代码被 javascript 引擎解释为

function showState() { // moved to the top (function declaration)
    console.log("Ready");
}

var showState; // moved to the top (variable declaration)
showState = function() { // left in place (variable assignment)
    console.log("Idle");
};

showState();

但是,我无法理解摘要中第三点的含义。有人能解释一下第三点吗?第三点的意义是什么?

根据第三点的解释,下面的代码片段应该返回8,函数bar()。但它说未定义,函数 bar()。

console.log(foo);
console.log(bar);
var foo = 8;
function bar() {
    console.log("bar");
}

从您链接到的文章:

在上面的代码中我们看到函数声明需要 优先于变量声明。在下一个例子中 我们会看到,当我们有函数声明与变量时 分配时,最后一个优先。

var showState = function() {
  console.log("Idle");
};

function showState() {
  console.log("Ready");
} 

showState();            // output: Idle

函数声明有两件事:

  1. 它声明了一个与函数同名的变量
  2. 它将函数分配给该变量

这两者都被提升,而不仅仅是变量声明。 (这与var具有关联赋值的语句,其中仅提升声明)。

这意味着尽管= function() {代码是第一个,later函数声明仍然首先运行,所以= function() {可以覆盖它。

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

JavaScript 变量提升解释 的相关文章

  • 实现快速 Javascript 搜索?

    基本上 我有一个带有文本框的页面和 ul 列在其下面 这 ul 由用户的朋友列表填充 用户开始在文本框中输入朋友的名字 例如按 r 我想立即更新 ul 每次按键仅显示名字以 R 开头的朋友 例如 Richard Redmond Raheem
  • 计算字符串中的唯一单词

    下面我尝试将字符串数组提供给一个函数 该函数将唯一单词添加到单词数组中 并且如果该单词已经在数组中 则增加计数数组中相应元素的计数 var words var counts calculate a b calculate a c funct
  • 如何使用 jQuery 在按下按钮后保持按钮处于活动状态

    我见过一些非常相似的问题 但一直无法找到我正在寻找的答案 我已经确定了解决方法 但想知道执行该任务的正确方法 我想要的是单击按钮并使活动状态保持不变 下一次单击将切换状态 这是所需的 我真正需要知道的是如何解决 uiButton activ
  • 以编程方式在指令内添加指令

    我想将指令的另一个实例附加到父指令中 但我无法使用 apply 重新编译我的指令 我想我在某个地方错过了一些东西 我的 HTML 代码 div div div div
  • 如何从 Javascript/Typescript 中的数组对象计算运行总计并使用 HTML 在每个实例上显示输出?

    我正在开发一个 MEAN 堆栈项目 并且有一个如下所示的数组 savings any 300 450 350 500 我还有一个名为 saving bf 的变量 它是从数据库中检索的结转储蓄 其值如下 savings bf 15000 我想
  • 如何在 HTML 表格上使用分页?

    我正在尝试使用这个分页library http flaviusmatis github io simplePagination js 在我的 HTML 表格页面 特别是浅色主题 中 但不知何故 我无法理解如何在我的 HTML 页面中以这种方
  • 如何解构 React props 并仍然访问其他 props?

    我很好奇如果我想要所有的 props 但也想要解构单个属性 那么组件的参数 props 是否可以像导入一样解构 我想这更像是一个 JavaScript 问题 而不是一个 React 问题 但是举个例子 import React useEff
  • jQuery 选择器定位具有 id AND class 的元素不起作用

    我有以下事件处理函数 jQuery document on click button submitb function e alert jQuery 包含在 html 文档中 但是 如果我点击 div class submitb Go di
  • 如何避免 TypeScript 中出现虚假的“未使用参数”警告

    我遇到过很多次这种情况 最后决定弄清楚正确的方法是什么 如果我有一个声明方法的抽象父类 然后一些具体子类在其实现中实现真正的逻辑 并且显然使用方法参数 但某些子类不需要在该方法中执行任何操作 因此不要使用方法参数 那些不必执行任何操作的方法
  • Angularjs - 将 True/False 显示为 Yes/No

    有没有一种简单的方法可以将真 假值显示为是 否 我正在从数据库检索包含以下内容的 JSON 对象 对象 WithCertification true 这是 HTML 有认证 elem WithCertification 正在显示这个 认证真
  • 在移动网站中处理 iPhone 事件(如向左滑动)

    iPhone 浏览器是否有可以使用 Javascript 挂钩的特殊事件 例如 如果用户向左滑动 我想执行某个操作 如果有类似的活动 很高兴看到所有这些活动的参考 理想情况下 有一天所有触摸屏移动浏览器都会有一个标准 您可以访问多点触控事件
  • 在 Chrome 中加载analytics.js时出现307重定向

    我正在构建一个网络应用程序并使用 Google Analytics analytics js 进行分析 我最近注意到 Chrome 中的分析功能无法正常工作 我使用单独模块中的标准代码片段加载分析并通过 requirejs 包含 我已验证该
  • Gmail 和 Google Chrome 12+ 中的“从剪贴板粘贴图像”功能如何工作?

    我注意到一个来自 Google 的博文 http gmailblog blogspot com 2011 06 pasting images into messages just got html其中提到 如果您使用的是最新版本的 Chro
  • 如何使用 jest 通过 Promise.all 设置多次提取测试

    我在测试中使用 jest 我正在使用 React 和 Redux 并且执行以下操作 function getData id notify return dispatch gt dispatch anotherFunction Promise
  • iPhone 点击时使 div 变暗

    当您的 div 附加了点击处理程序时 当点击该 div 时 iPhone 会使该 div 变暗 作为点击指示器 示例 在移动 Safari 上查看http jsbin com awejo3 4 http jsbin com awejo3 4
  • JavaScript 中的最短路径

    几周来我一直在寻找一种在 JavaScript 中计算最短路径的方法 我一直在玩书数据结构和算法作者 格罗纳 Groner 名字恰如其分 https github com loiane javascript datastructs algo
  • Facebook API Javascript JSON 响应

    function getUser FB api me function response console log Response is response alert Your name is response first name ale
  • 适用于多应用项目的 Grunt 和 requirejs 优化器

    我在让 Grunt 对具有以下结构的项目执行 requirejs 优化时遇到问题 static js apps app js dash js news js many more app files build collections lib
  • 在firefox上用js改变表单方法

    我需要使用 javascript jQuery 或纯 更改表单的方法属性 我的表单有 method post 我尝试用以下方法更改它 submit button click function var url input id url val
  • JavaScript 正则表达式两个标签之间的多行文本

    我编写了一个正则表达式来从 HTML 中获取字符串 但似乎多行标志不起作用 这是我的模式 我想将文本输入h1 tag var pattern div class box content 5 h1 lt lt h1 gt mi m html

随机推荐

  • AngularJS 和 Redactor 插件

    所以我正在 AngularJS 中开发一个新网站 并且非常喜欢它 然而 我遇到了一个问题 我正在尝试向我的文本区域添加一个名为 Redactor 的 jQuery 插件 但我认为当我初始化该插件时 它会替换文本区域元素 这是有问题的原因是因
  • Cloudfront使用ssl将www重定向到裸域[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 如果之前有人问过这个问题 请原谅我 有很多资源涉及到这个问题 但似乎没有什么适合我的特定 https 用例 我正在尝试重定向https www example com to http
  • 如何在特定位置显示自定义对话框?

    我有一个按钮 单击它会弹出一个对话框 该对话框显示在中心 但我想将它显示在按钮下方 如何做到这一点 我也尝试使用弹出窗口 这是代码 private void showPopup final Activity context Point p
  • docker 映像标识符是否可用于该 docker 内运行的进程?

    对于我的日志 我想包含 docker 映像标识符 这样我以后就可以将外部日志与生成它们的映像重新协调 有没有办法让 Docker 内部的进程获取它正在运行的图像标识符 也许是一个 dev or proc file 在 OCI 中以及之前在
  • Jetty:Spring 5 运行失败并出现 NoSuchMethodError

    我正在尝试将我的网络应用程序更新到当前的库 当我将 Spring 从 3 1 1 升级到 5 0 0 时 它开始失败 java lang NoSuchMethodError javax servlet http HttpServletRes
  • 使用 NavigationDrawer 在 Fragments 和 MapFragment 之间切换 *已修复*

    问题解决了 进一步向下滚动 我目前正在编写一个带有导航抽屉的应用程序 我想要其中一个片段中的地图 要在导航抽屉中的片段之间切换 我有这个 Switch 案例 private void displayView int position upd
  • 在类内部定义一个const静态对象变量

    我需要在类定义中创建一个静态对象 在 Java 中这是可能的 但在 C 中我得到一个错误 PlaceID h 9 43 error invalid use of incomplete type class PlaceID PlaceID h
  • 一次访问 numpy 数组中的块

    提供了一个 numpy 数组 arr np array 0 1 2 3 4 5 6 7 8 9 10 11 12 我想知道如何访问选择的大小chunks选择分离 连接和切片 例如 获取由两个值分隔的大小为 3 的块 arr chunk 3
  • 数据库更改时自动通知:类似于 facebook 好友请求

    我希望开发一个基于 php mysql 的社交网站 注册用户可以选择将其他用户添加为好友 就像在 Facebook 中所做的那样 如果用户 A 点击用户 B 个人资料上的 添加好友 链接 好友请求记录将相应地在 A 和 B 的数据库中创建
  • 如何使用 C# 将 PDF 转换为 HTML [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我必须阅读 pdf 并创建 html 文档 用于在我的网站上上传的简历 我无法使用任何共
  • Symfony2 和 date_default_timezone_get() - 依赖系统的时区设置是不安全的

    我有一个 Symfony2 项目 我今天将 php 更新到 5 5 7 从那时起 我得到了 Warning date default timezone get It is not safe to rely on the system s t
  • 如何关闭 X 按钮的可见性并禁用 alt + F4 功能

    有人可以告诉我如何将主应用程序窗口中的 X 按钮设置为 false 以及如何将 Alt F4 功能设置为不可用或只是禁用它吗 Update 我将其添加到 public ZalumView SingleFrameApplication app
  • 在 App Delegate 中管理两个故事板

    我决定避免使用自动布局 因此我目前正在尝试实现代码 以使我的应用程序根据屏幕尺寸管理两个不同的故事板 我一直在关注这个教程 http pinkstone co uk how to load a Different storyboard de
  • 将类的 Nullable 双属性序列化为 Xml 文本

    我必须使用以下代码进行序列化 using System using System Collections Generic using System Linq using System Text using System IO using S
  • Python中抽象类和接口的区别

    Python中抽象类和接口有什么区别 有时您会看到以下内容 class Abstract1 Some description that tells you it s abstract often listing the methods yo
  • NetBeans 中的 GroupLayout 自动生成的代码

    在进行了近 4 年的 Java 编程之后 我决定学习如何自己编写 GUI 类 因为直到现在我一直使用 NetBeans GUI 编辑器 我并不为它感到特别自豪 但它运行得很好 避免了我担心组件 布局 问题是我正在关注如何使用GroupLay
  • 如何在 python (numpy) 中更快地计算每行两个矩阵 A 和 B 的外积?

    假设我们有两个矩阵 A 和 B A 具有形状 r k B 具有形状 r l 现在我想计算每行这两个矩阵的 np outer 乘积 在外积之后 我想对轴 0 中的所有值求和 所以我的结果矩阵应该具有形状 k l 例如 A的形式是 4 2 B的
  • 屏蔽字符串的一部分

    所以我的问题是 我有一项任务需要解决 我有一个简单的功能 def multiplicator x y var1 x y return var1 我需要使用这个乘法器在另一个函数中得到这个结果 Enter 5435843398429829 o
  • 为什么实体框架会生成缓慢的过度设计的 SQL?

    我有这个代码 DbSet
  • JavaScript 变量提升解释

    我发现了以下关于 javascript 中变量提升的文章 文章总结了以下三点 1 All declarations both functions and variables are hoisted to the top of the con