问题标签 [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 - 用于函数声明的咖啡脚本宏
Coffeescript 中的函数不能被提升,因为它没有函数声明,只有函数表达式。如何编写一个宏来向咖啡脚本添加函数声明?
具体来说,我想要:
编译为:
代替:
javascript - Javascript范围链式提升
例如,我有点困惑如何在 JavaScript 中完成词法作用域
如果我们a
在第 5 行重新定义,那么它将打印undefined
. 这是为什么?为什么解释器不向上遍历检查outer.VO
,即使a
可以在 中找到inner.VO
,但它在定义之前就被使用了?
javascript - 是否存在起吊行为有益的情况
我在与开发人员进行一些随意的讨论时遇到了提升这个话题JavaScript
,我被告知提升不是一个错误、错误或编写不佳的功能,而是开发人员的强大工具。
谁能解释JavaScript
变量和函数的提升如何作为一个强大的概念,JavaScript
或者它在编写代码时有什么帮助?(或)它只是一个无意中被开发人员意外发现的概念吗?
c# - 为什么 C# 中不存在提升功能?
我每天都使用 Javascript 和 C#,有时在使用 Javascript 时我不得不考虑提升。但是,C# 似乎没有实现提升(我知道),我不知道为什么。它更像是一种设计选择,还是更类似于适用于所有静态类型语言的安全或语言约束?
作为记录,我并不是说我希望它存在于 C# 中。我只是想了解为什么它没有。
编辑:当我在 LINQ 查询之后声明变量时,我注意到了这个问题,但是 LINQ 查询被推迟到变量声明之后。
引发错误,而:
才不是。
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!
javascript - 为什么这会产生语法错误?
我试图try
更好地理解从内部提升,所以我做了以下测试用例,但它抛出了一个SyntaxError
.
这不是我所期待的。
javascript - JavaScript 变量提升
我无法理解为什么 name 在这里得到一个值
变量名不应该是内部函数的本地变量吗?
javascript - Javascript变量和函数提升
david sharif做了一个 JS 测验,看起来很像——
据我了解,首先托管函数,然后在内部声明变量。该函数的托管形式将类似于(如果我错了,请纠正我)-
为什么 typeof bar() 不是未定义的函数?
是不是因为,在函数执行的时候,找到了第一个 foo (也就是一个函数),没有继续搜索就愉快的返回了。或者是其他东西?
珍惜你的时间。
javascript - 为什么 JSLint 抱怨:“someFunction() 在定义之前就被使用了”?
搜索 JSLint 错误“在定义之前使用”我发现了这些:
- JSLint:在定义错误之前使用函数
- 函数在定义之前使用 - JSLint
- JSLint:在定义之前使用
- jsLint 错误:“somefunction() 在定义之前被使用”</a>
- jslint - 我们应该容忍错误的定义吗?
问题
这些都没有回答为什么会显示错误。
细化
根据ECMA-262 规范,函数在执行开始之前进行评估,因此使用关键字声明的所有函数function
都可用于声明它们的位置的所有代码独立(假设它们在该范围内可访问)。
这也称为提升。
Douglas Crockford 似乎认为不管提升效果如何,最好在使用它的代码之前声明每个函数。
根据StackOverflowNewbie在他的问题中的说法,这会引发一些代码组织问题。更不用说像我这样的一些人更喜欢在 main/init 代码下声明他们的函数。
在这些问题上,有一些方法可以避免或修复错误,例如使用函数表达式与函数声明。但他们都没有告诉我错误的原因。甚至没有Crockford 的网站。
问题)
为什么在声明之前调用函数是错误的,即使它是使用function
关键字声明的?
在 JSLint 上下文中使用函数表达式而不是函数声明会更好吗?如果首选一个,为什么?
笔记
不寻找类似的答案:
- 克罗克福德是个暴君
- 只是克罗克福德的意见
谢谢 :*
javascript - 有人可以解释闭包的js变量提升和堆栈执行吗
在阅读另一个主题时,我遇到了这段代码:
这将输出:a,b,c,c,c,c。正如作者所解释的,这里的问题是 x var 在函数的开头被提升,因此在循环中使用它时不会保持它的值。我不明白的是为什么 c 在第二个 console.log 上分配给 x 3 次?有人可以解释吗?