问题标签 [hoisting]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
33 浏览

javascript - 在定义第一个函数之前在另一个函数中使用一个函数

在编写 API 时,我倾向于将函数按自上而下的顺序排列,最暴露的函数在顶部,辅助函数在底部。但是,当使用var而不是魔术声明定义函数时function,函数在定义之前不能使用。那么如果我们有一个被调用的对象$company并且我们正在定义它的方法呢?我可以以这种方式安全地订购我的 JS 吗?

它似乎适用于我当前版本的 Firefox,但我想知道它是否是已定义的行为。是否有任何版本的 IE 出现这种情况?

0 投票
2 回答
774 浏览

javascript - 提升名称解析顺序如何在 JavaScript 中工作?

我遇到了一个有趣的测验

我的解释是这样的(根据控制台这是错误的:)):

这是我正在阅读的参考资料

在 JavaScript 中,名称以四种基本方式之一进入范围: 1. 语言定义:默认情况下,所有范围都被赋予名称 this 和参数。2. 形参:函数可以具有命名形参,其作用域为该函数的主体。3. 函数声明:这些是函数 foo() {} 的形式。4. 变量声明:采用 var foo 的形式;

他后来引用:

要记住的最重要的特殊情况是名称解析顺序。请记住,名称有四种方式进入给定范围。我在上面列出它们的顺序是它们被解析的顺序。通常,如果一个名称已经定义,它永远不会被另一个同名的属性覆盖。这意味着函数声明优先于变量声明。这并不意味着对该名称的赋值不起作用,只是声明部分将被忽略。

这让我感到困惑,任何人都可以参考上面的例子来简化这个吗?我想知道的要点:

  • 没有var函数内部的变量如何提升?
  • 提升期间是否发生变量覆盖?
0 投票
1 回答
748 浏览

scala - scala编译器会提升正则表达式吗

我想知道这是否:

和这个:

会有任何性能差异。即,scala 编译器会识别这"some complex regex".r是一个常量并缓存它,这样它就不会每次都重新编译?

0 投票
2 回答
1434 浏览

javascript - angularjs中的变量未按预期提升

我一直在关注 John Papa 和他的 Angular 风格指南建议。我喜欢将所有可用于视图的变量和方法放在控制器顶部并依靠 javascript 在运行时提升变量的想法。我显然不像我想象的那样理解提升。在下面的示例中,我希望将dumbValue 变量声明提升到$scope.dumbValue 赋值语句之上;

但是在这个 Plunker中,您可以看到情况并非如此。选择 ng-model 值未初始化。如果将赋值语句移到变量声明下,则初始化 ng-model。

为什么 javascript 不提升var dumbValue上面的分配,或者它是关于 Angular 处理它的方式我不理解的东西?

0 投票
2 回答
67 浏览

javascript - JavaScript 多重警报提示

我已阅读有关 javascript 函数 hoisitng 的信息。但在这种情况下,我不明白匿名函数是如何被提升的

如果我运行代码,会提示两条警报消息。一显示姓名、办公室等未定义。

0 投票
5 回答
298 浏览

javascript - JavaScript 变量提升示例

我对 JavaScript 中的变量提升有疑问。

考虑以下示例:​</p>

我实际上很困惑为什么typeof myName返回为string

根据我的理解,该示例将按如下方式进行;

  1. 首先,函数声明 ( function myName ()) 将被提升到顶部,然后
  2. JS 解释器将读取该行var myName = "Richard"(因为函数声明优先于变量声明)。但是,由于已经有一个名为“myName”的属性,因此该语句将被忽略。

因此typeof myName应该作为函数(而不是字符串)返回。

我的理解哪里不对?

0 投票
2 回答
96 浏览

javascript - 当函数作为参数传递时,Javascript函数提升不适用?

Javascript有一个有趣的东西叫做函数提升,这意味着我们可以在声明之前(即视觉上)使用函数表达式(注意:我的措辞可能不正确,请随意评论)

但是,如果我们将命名函数作为参数传递,则不会发生函数提升。语法看起来非常相似,但我想这不再是函数表达式,而是命名的匿名函数(!)。

  • 函数表达式和命名的 lambda 之间确实有区别吗?
  • 两者之间还有其他显着差异吗?
  • 考虑到 fn2 是一个命名的 lambda,fn2除了 fn2 本身之外,是否可以从其他任何地方访问该名称?
0 投票
1 回答
709 浏览

javascript - 全局变量的javascript提升

我想知道 javascript 提升如何用于全局变量。

假设我有以下代码片段:

在这种情况下,我收到错误“b is not defined”。我想知道为什么 Javascript 提升不适用于全局变量。我试图寻找这个,但只得到变量提升的结果。有什么想法吗??

0 投票
1 回答
81 浏览

javascript - 建议克服 Javascript 提升

我想我的 javascript 代码受到我想要解决的提升效果的影响。

我正在通过 SOAP 获取要在热图上可视化的数据,这些数据存储在“ajax”代码块内的全局变量 heatMapData 中,然后应将它们分配给 google.maps.visualization.HeatmapLayer 构造函数。不幸的是,当这个构造函数被调用时,变量 heatMapData 是空的,尽管它已经用指令 heatMapData.push({location: new google ...) 正确初始化,我用 firebug 检查了它。. 这可能是因为这个变量被提升了。从 ajax 代码返回后,如何保留 heatMapData 中的值?先感谢您。

0 投票
2 回答
124 浏览

javascript - 在 if 语句中提升 Javascript 函数

if在语句中提升 javascript 函数是怎么回事?js只是不这样做吗?以下代码在浏览器中运行时运行良好。它会在两秒钟后发出“嘿”的警报。

但是围绕这个添加一个琐碎的if声明:

突然它抱怨说hey is not defined
现在,如果您将回调从 更改heyfunction(){hey()},如下所示:

然后它再次开始工作,即使使用 if 语句。发生什么了?