问题标签 [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 回答
46 浏览

javascript - javascript中的对象数组自动组合属性

我从朋友那里得到了这段代码(下面的小提琴链接)。我试图弄清楚的问题是数组(arr1,它是一个对象数组)自动将索引 0 处的对象的数量属性与索引 2 处的对象组合在一起,如控制台日志中所示。但是,如果我通过将其注释掉来停止对函数 addByPayCodeAndLaborAcc() 的调用,那么它将按应有的方式记录正常数组。请帮助为什么会发生这种情况。应该是吊装的原因吧。

这是小提琴。 http://jsfiddle.net/3ZQNg/

我看到的 console.log

但是我在代码中的数组是

为什么索引 0 处的对象的数量属性会自动附加到索引 2 处的对象的数量属性?

解决方案 :我找到了原因。当对象被复制时,它们是通过引用复制的。也就是说,同一个对象保留在堆中,并且仅复制其引用,这与按值复制的主要变量类型(如 Number 或 String)不同(即创建了一个新副本)。最初 uiqueRows 是 []。selectedTotals 数组中的第一个对象(带有 pcname a)然后被复制到 uniqueRows(通过引用复制 - 因此 uniqueRows[0] 现在与 selectedTotals[0] 相同)。然后我们将第二个对象添加到 uniqueRows。当我们来到具有相同 pcname“a”的第三个对象时,摘要对象被设置为 uniqueRows[0](与 selectedTotals[0] 相同)。因此,当 summary.amount 实际上更新时 selectedRows[0] 的数量属性正在更新(因为它们引用堆中的相同对象)。

请参考更新后的小提琴中的 console.logs。日志表明返回为“summary”的对象与 selectedTotals[0] 相同,因此在日志 http://jsfiddle.net/3ZQNg/1/中打印“true”

0 投票
2 回答
115 浏览

javascript - 变量提升 - 函数中带有全局变量名的“var”

我正在练习一些场景并找到一个案例:

这是小提琴

根据关闭栏功能应该可以访问,var x所以我希望警报 1 并且条件因为错误而变为错误,if(!1)但它发出警报undefined并且条件为真,第二个警报的值为 10。

所以我很困惑为什么它提示未定义?

根据在特定范围内的提升,您可以在任何地方定义一个变量,它总是被认为是在顶部定义的。

如果是由于吊装效应,它仍然必须警告 10 而不是 undefined。

0 投票
1 回答
320 浏览

javascript - 可能的变量提升问题

考虑这个 JS(它在结束时运行body并导致错误)

然后我删除了逗号并添加了var关键字,但收到了类似的错误(它不是 HTML):

它起作用的唯一方法是alert()在赋值之后直接添加语句div。我假设这与变量提升有关,但经验不足,无法确定。

有人可以简要介绍一下变量提升以及这里可能发生的情况吗?谢谢!

0 投票
3 回答
72 浏览

javascript - 匿名 Javascript 函数或存储在变量中?

调用 javascript 函数有多种方法,大多数时候我使用匿名函数,因为它可以在我喜欢的任何地方触发。

我似乎无法理解为什么使用变量方法而不是匿名函数。对我来说主要的缺点是因为吊装问题....

任何人都可以解释或提供一个真实的例子,什么时候适合在变量中存储函数?

0 投票
3 回答
288 浏览

javascript - Javascript 闭包和内部作用域

嘿,我正在尝试理解 JavaScript 闭包并对这段代码有一个快速的问题,

输出:

我期待所有的输出都是,但true在第一行。为什么是这样?aundefinedwoot()

0 投票
1 回答
275 浏览

javascript - 函数提升和返回语句

我希望这个(为了示例而减少)功能可以顺利运行,但由于以下原因而失败fn2 is not defined

return 语句如何fn2从提升中排除函数表达式?

0 投票
1 回答
5710 浏览

javascript - 在 node.js 中链接 underscore.js 会引发“无效的 REPL 关键字”

我是使用下划线/节点的 n00b 并且正在尝试理解链接函数的概念。但是,当尝试在节点中链接函数时,我无法得出正确的输出。从下划线的链接部分获取示例片段会产生“无效的 REPL 关键字”:

在这种情况下,我是ASI的受害者吗?如果是这样,“;”在哪里 试图插入?我很困惑,因为将此代码段插入 JSHint 不会产生错误。你们中的一个可以帮我找出错误吗?

谢谢!

0 投票
2 回答
151 浏览

javascript - Do inner functions in JavaScript get hoisted? How do the scoping rules apply to them?

I thought that JavaScript doesn't have block scope, but function scope, and that declarations are hoisted from their block to the top of their parent functions.

However, the following code does not work as expected:

The first one(1); call proceeds normally, without any errors, however the execution stops when the second one(2); is called.

This behavior is intuitive: the function inner is defined only if a==1.

But how is it consistent with the scoping/hoisting rules?

I thought its definition would be hoisted to the top of its scope, outside of the if block which is supposed to have no effect!

Edit: here are the errors I am getting:

screenshot of Firefox console showing the error

Browser is Firefox. Fiddle here.

0 投票
3 回答
173 浏览

javascript - Javascript 全局引用错误

我在一次采访中得到了这个问题,我很好奇为什么这两个输出不同的东西:

输出:

然而:

输出:

baz引用方式和window.baz引用方式有什么区别?我虽然全局变量自动附加到窗口?

0 投票
3 回答
272 浏览

javascript - 函数混淆中的javascript变量范围

这是2个javascript函数

另一个代码是这个

在两个函数分配/声明中都是在 alert() 调用之后。那为什么警报消息分别是10undefined