为什么这个JS代码打印未定义
Why does this JS code print undefined?
我不明白为什么foo
的值在以下代码中没有定义:
var foo = 1;
function bar() {
if (false) {
var foo = 10;
}
alert("Foo is " + foo);
}
bar();
结果:Foo为undefined
。https://jsfiddle.net/yk7ae9b0/
而这些变化的表现正如预期的那样。
var foo = 1;
function bar() {
if (true) {
var foo = 10;
}
alert("Foo is " + foo);
}
bar();
结果:Foo为10
var foo = 1;
function bar() {
if (false) {
// var foo = 10;
}
alert("Foo is " + foo);
}
bar();
结果:Foo为1
任何帮助都将不胜感激。
您的var foo
并没有定义在您认为的位置。JavaScript中的变量的作用域是使用它们的函数,而不是声明它们的块。因此,您拥有的代码:
function bar() {
if (false) {
var foo = 10;
}
alert(foo);
}
JS引擎是否真的将解释为:
function bar() {
var foo;
if (false) {
foo = 10;
}
alert(foo); // foo was never assigned a value!
}
因此,当警报触发时,您有一个未定义的变量foo
,它隐藏了您在函数外声明的全局foo
。
(这也会影响像for(var i=...) ...
这样的东西——var i
是函数范围的,并且将是函数中任何地方的声明变量,而不仅仅是for循环中的声明变量)
相关文章:
- 为什么这个JS代码打印未定义
- $.每个jquery循环打印一个“;未定义的“;对于getJSON请求后的每个元素,网格数据都会完美地打印出来
- 为什么这个功能打印“;未定义的未定义的“;作为联系人名称,添加“新对象”
- 节点.js在不可能的地方打印“未定义”
- 文本框的值打印为“未定义”
- 使用Javascript打印HTML:未定义错误
- 为什么Javascript代码打印'未定义'即使变量被声明为全局变量
- 将 JSON 数据解析为 SELECT 打印未定义
- 本地存储的 json 数组正在打印,但来自 json 的值在 cordova 应用程序中给出未定义
- 在自定义指令中未定义的 NG 模型值打印
- 为什么这个 JavaScript 代码在控制台上打印“未定义”
- 得到“;未定义的“;当我用js打印json数组时
- 从父对象内部的相邻对象打印对象会导致'未定义'消息
- 打印字符串显示为未定义
- 打印Javascript split()数组并将未定义的值转换为字符串
- JQuery函数只打印未定义
- 变量范围困惑,打印未定义的变量声明在函数内
- 为什么console.log有时会为已导出的变量打印未定义
- 为什么 JavaScript 变量声明在控制台会导致打印“未定义”
- 打印对象属性也打印未定义