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

javascript - 用于函数声明的咖啡脚本宏

Coffeescript 中的函数不能被提升,因为它没有函数声明,只有函数表达式。如何编写一个宏来向咖啡脚本添加函数声明?

具体来说,我想要:

编译为:

代替:

0 投票
1 回答
177 浏览

javascript - Javascript范围链式提升

例如,我有点困惑如何在 JavaScript 中完成词法作用域

如果我们a在第 5 行重新定义,那么它将打印undefined. 这是为什么?为什么解释器不向上遍历检查outer.VO,即使a可以在 中找到inner.VO,但它在定义之前就被使用了?

0 投票
1 回答
145 浏览

javascript - 是否存在起吊行为有益的情况

我在与开发人员进行一些随意的讨论时遇到了提升这个话题JavaScript,我被告知提升不是一个错误、错误或编写不佳的功能,而是开发人员的强大工具。

谁能解释JavaScript变量和函数的提升如何作为一个强大的概念,JavaScript或者它在编写代码时有什么帮助?(或)它只是一个无意中被开发人员意外发现的概念吗?

0 投票
5 回答
4035 浏览

c# - 为什么 C# 中不存在提升功能?

我每天都使用 Javascript 和 C#,有时在使用 Javascript 时我不得不考虑提升。但是,C# 似乎没有实现提升(我知道),我不知道为什么。它更像是一种设计选择,还是更类似于适用于所有静态类型语言的安全或语言约束?

作为记录,我并不是说我希望它存在于 C# 中。我只是想了解为什么它没有。

编辑:当我在 LINQ 查询之后声明变量时,我注意到了这个问题,但是 LINQ 查询被推迟到变量声明之后。

引发错误,而:

才不是。

0 投票
2 回答
90 浏览

javascript - Javascript Hoisting/Scope

I'm learning Javascript at the minute and have a question about hoisting/scoping - perhaps I'm missing something.

If I define a global variable, I cant reference that variable's value inside a function because its out of scope?

turns out to be

which both outputs undefined. What are the points of global variables or how do you use them inside a function? - As I said what am i missing here! :)

Also hoisting works on functions? But NOT on anonymous functions? Correct?

Any help is appreciated!

Thanks!

0 投票
2 回答
63 浏览

javascript - 为什么这会产生语法错误?

我试图try更好地理解从内部提升,所以我做了以下测试用例,但它抛出了一个SyntaxError.

这不是我所期待的。

0 投票
2 回答
92 浏览

javascript - JavaScript 变量提升

我无法理解为什么 name 在这里得到一个值

变量名不应该是内部函数的本地变量吗?

0 投票
3 回答
626 浏览

javascript - Javascript变量和函数提升

david sharif做了一个 JS 测验,看起来很像——

据我了解,首先托管函数,然后在内部声明变量。该函数的托管形式将类似于(如果我错了,请纠正我)-

为什么 typeof bar() 不是未定义的函数?

是不是因为,在函数执行的时候,找到了第一个 foo (也就是一个函数),没有继续搜索就愉快的返回了。或者是其他东西?

珍惜你的时间。

0 投票
2 回答
1288 浏览

javascript - 为什么 JSLint 抱怨:“someFunction() 在定义之前就被使用了”?

搜索 JSLint 错误“在定义之前使用”我发现了这些:

问题

这些都没有回答为什么会显示错误。

细化

根据ECMA-262 规范,函数在执行开始之前进行评估,因此使用关键字声明的所有函数function都可用于声明它们的位置的所有代码独立(假设它们在该范围内可访问)。

这也称为提升

Douglas Crockford 似乎认为不管提升效果如何,最好在使用它的代码之前声明每个函数。

根据StackOverflowNewbie在他的问题中的说法,这会引发一些代码组织问题。更不用说像我这样的一些人更喜欢在 main/init 代码下声明他们的函数。

在这些问题上,有一些方法可以避免或修复错误,例如使用函数表达式与函数声明。但他们都没有告诉我错误的原因。甚至没有Crockford 的网站

问题)

为什么在声明之前调用函数是错误的,即使它是使用function关键字声明的?

在 JSLint 上下文中使用函数表达式而不是函数声明会更好吗?如果首选一个,为什么?

笔记

寻找类似的答案:

  • 克罗克福德是个暴君
  • 只是克罗克福德的意见

谢谢 :*

0 投票
2 回答
248 浏览

javascript - 有人可以解释闭包的js变量提升和堆栈执行吗

在阅读另一个主题时,我遇到了这段代码:

这将输出:a,b,c,c,c,c。正如作者所解释的,这里的问题是 x var 在函数的开头被提升,因此在循环中使用它时不会保持它的值。我不明白的是为什么 c 在第二个 console.log 上分配给 x 3 次?有人可以解释吗?