问题标签 [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.
javascript - 在定义第一个函数之前在另一个函数中使用一个函数
在编写 API 时,我倾向于将函数按自上而下的顺序排列,最暴露的函数在顶部,辅助函数在底部。但是,当使用var
而不是魔术声明定义函数时function
,函数在定义之前不能使用。那么如果我们有一个被调用的对象$company
并且我们正在定义它的方法呢?我可以以这种方式安全地订购我的 JS 吗?
它似乎适用于我当前版本的 Firefox,但我想知道它是否是已定义的行为。是否有任何版本的 IE 出现这种情况?
javascript - 提升名称解析顺序如何在 JavaScript 中工作?
我遇到了一个有趣的测验
我的解释是这样的(根据控制台这是错误的:)):
这是我正在阅读的参考资料
在 JavaScript 中,名称以四种基本方式之一进入范围: 1. 语言定义:默认情况下,所有范围都被赋予名称 this 和参数。2. 形参:函数可以具有命名形参,其作用域为该函数的主体。3. 函数声明:这些是函数 foo() {} 的形式。4. 变量声明:采用 var foo 的形式;
他后来引用:
要记住的最重要的特殊情况是名称解析顺序。请记住,名称有四种方式进入给定范围。我在上面列出它们的顺序是它们被解析的顺序。通常,如果一个名称已经定义,它永远不会被另一个同名的属性覆盖。这意味着函数声明优先于变量声明。这并不意味着对该名称的赋值不起作用,只是声明部分将被忽略。
这让我感到困惑,任何人都可以参考上面的例子来简化这个吗?我想知道的要点:
- 没有
var
函数内部的变量如何提升? - 提升期间是否发生变量覆盖?
scala - scala编译器会提升正则表达式吗
我想知道这是否:
和这个:
会有任何性能差异。即,scala 编译器会识别这"some complex regex".r
是一个常量并缓存它,这样它就不会每次都重新编译?
javascript - angularjs中的变量未按预期提升
我一直在关注 John Papa 和他的 Angular 风格指南建议。我喜欢将所有可用于视图的变量和方法放在控制器顶部并依靠 javascript 在运行时提升变量的想法。我显然不像我想象的那样理解提升。在下面的示例中,我希望将dumbValue 变量声明提升到$scope.dumbValue 赋值语句之上;
但是在这个 Plunker中,您可以看到情况并非如此。选择 ng-model 值未初始化。如果将赋值语句移到变量声明下,则初始化 ng-model。
为什么 javascript 不提升var dumbValue
上面的分配,或者它是关于 Angular 处理它的方式我不理解的东西?
javascript - JavaScript 多重警报提示
我已阅读有关 javascript 函数 hoisitng 的信息。但在这种情况下,我不明白匿名函数是如何被提升的
如果我运行代码,会提示两条警报消息。一显示姓名、办公室等未定义。
javascript - JavaScript 变量提升示例
我对 JavaScript 中的变量提升有疑问。
考虑以下示例:</p>
我实际上很困惑为什么typeof myName
返回为string。
根据我的理解,该示例将按如下方式进行;
- 首先,函数声明 (
function myName ()
) 将被提升到顶部,然后 - JS 解释器将读取该行
var myName = "Richard"
(因为函数声明优先于变量声明)。但是,由于已经有一个名为“myName”的属性,因此该语句将被忽略。
因此typeof myName
应该作为函数(而不是字符串)返回。
我的理解哪里不对?
javascript - 当函数作为参数传递时,Javascript函数提升不适用?
Javascript有一个有趣的东西叫做函数提升,这意味着我们可以在声明之前(即视觉上)使用函数表达式(注意:我的措辞可能不正确,请随意评论)。
但是,如果我们将命名函数作为参数传递,则不会发生函数提升。语法看起来非常相似,但我想这不再是函数表达式,而是命名的匿名函数(!)。
- 函数表达式和命名的 lambda 之间确实有区别吗?
- 两者之间还有其他显着差异吗?
- 考虑到 fn2 是一个命名的 lambda,
fn2
除了 fn2 本身之外,是否可以从其他任何地方访问该名称?
javascript - 全局变量的javascript提升
我想知道 javascript 提升如何用于全局变量。
假设我有以下代码片段:
在这种情况下,我收到错误“b is not defined”。我想知道为什么 Javascript 提升不适用于全局变量。我试图寻找这个,但只得到变量提升的结果。有什么想法吗??
javascript - 建议克服 Javascript 提升
我想我的 javascript 代码受到我想要解决的提升效果的影响。
我正在通过 SOAP 获取要在热图上可视化的数据,这些数据存储在“ajax”代码块内的全局变量 heatMapData 中,然后应将它们分配给 google.maps.visualization.HeatmapLayer 构造函数。不幸的是,当这个构造函数被调用时,变量 heatMapData 是空的,尽管它已经用指令 heatMapData.push({location: new google ...) 正确初始化,我用 firebug 检查了它。. 这可能是因为这个变量被提升了。从 ajax 代码返回后,如何保留 heatMapData 中的值?先感谢您。
javascript - 在 if 语句中提升 Javascript 函数
if
在语句中提升 javascript 函数是怎么回事?js只是不这样做吗?以下代码在浏览器中运行时运行良好。它会在两秒钟后发出“嘿”的警报。
但是围绕这个添加一个琐碎的if
声明:
突然它抱怨说hey is not defined
。
现在,如果您将回调从 更改hey
为function(){hey()}
,如下所示:
然后它再次开始工作,即使使用 if 语句。发生什么了?