我目前正在阅读一些javascript教程,我从这里得到了一些示例代码:http://www.w3schools.com/js/js_if_else.asp
if (hour < 18) {
greeting = "Good day";
}
在此示例中,greeting变量不带var语句前缀。现在我查看了这意味着什么,我的理解是,如果没有变量被它创建的全局范围发现,它会导致java脚本查找更高的范围。
这个教程是这样做的,因为if语句的块是本地环境吗?如果是这样,那意味着如果我有一些看起来像这样的代码:
if (condition){var x=10};
else {var x=5};
然后我仍然没有全局变量x来调用?
答案 0 :(得分:2)
在JavaScript(ES5)中,if
语句在使用var
声明时不会创建本地范围。使用函数创建局部范围。
答案 1 :(得分:0)
W3Schools因在代码示例中使用不良做法而臭名昭着,您已经找到了一个这样的例子。他们正在创建一个全局范围的变量。
Blocks只会为使用新let
keyword声明的变量创建局部范围。如果您使用的是较早版本的JavaScript,或者您使用的是var
关键字,则该变量的范围限定为声明变量的最内层function
。< / p>
通过var
在任何函数之外声明的变量的范围限定为window
(全局)范围。
{
var x = "hello world";
}
document.getElementById("var-value").innerHTML = x;
&#13;
<span id="var-value"></span>
&#13;
在上面的代码段中,如果您将var
替换为let
,则会产生错误,因为x
未定义。
{
let x = "hello world";
}
document.getElementById("var-value").innerHTML = x;
&#13;
<span id="var-value"></span>
&#13;
答案 2 :(得分:0)
您可以在if..else之外获取x的值。这是因为JavaScript具有函数范围而不是块。我创建了一个示例的JSFiddle,可以在https://jsfiddle.net/h4gjb8mt/
找到示例:
var condition = true;
if (condition) {
var x=10;
}
else {
var x=5;
}
console.log(x);