变量未吊装
Variable not hoisted
本文关键字:变量 更新时间:2023-09-26
在Javascript中,变量被提升到它们被声明的范围的顶部。
但是,在下面的代码中,变量myvar
似乎没有被提升。
<html>
<body>
</body>
</html>
<script type="text/javascript">
console.log(typeof myvar);
var myvar = "value";
console.log(typeof myvar);
</script>
上面的输出是:
undefined
string
我预计第一行会说"字符串",因为myvar
应该被吊到它上面。
为什么不是这样?
变量声明被提升,赋值不是。
通过在函数中的任意位置使用 var myvar
,您可以创建一个局部范围的变量myvar
,但是如果您遵循它= something
则赋值将按正常的代码顺序进行。
这个问题出现了,昆汀的回答很好(一如既往),但只是为了详细说明:
JavaScript引擎实际处理代码的方式是这样的:
// Before any step-by-step code
var myvar;
// Now step-by-step starts
console.log(typeof myvar); // undefined since no value has been written to it
myvar = "value";
console.log(typeof myvar); // "value" because that's its value now
也就是说,这个:
var myvar = "value";
。实际上是在两个不同的时间发生的两件独立的事情。变量声明(var myvar
部分),发生在范围中的任何分步代码运行之前,以及初始化(myvar = "value"
部分;在处理时它实际上是一个赋值表达式),它发生在代码中的该行的位置。
相关文章:
- 将函数的上下文应用于javascript变量
- 无法导出函数expressjs/requestjs中的变量
- 函数参数中的数据与指定变量之间的任何性能差异
- 将PHP变量传递给jQuery时遇到问题
- 如何通过ajax刷新JSF填充的javascript变量
- 参数变量出现ngTable指令问题
- 通过javascript重定向html传递php变量
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 全局变量和全局对象的属性之间有什么区别吗
- 如何在Bootstrap Modal中为动态点击生成的变量设置jade属性
- 值对象在某个变量发生更改后发生更改
- Javascript变量赋值|
- AngularJS-在JSON选择器中使用变量名
- Javascript计数器变量未显示正确的值
- delete关键字在全局变量上的不同行为
- 如何在php变量中嵌入JQuery代码
- ReactJS映射:如何仅在url变量不为空时呈现html链接
- 在javascript函数中设置全局变量
- 将变量传递给外部Javascript
- 如何将getJson的响应保存在全局变量中