if语句是否创建了本地范围?

时间:2016-06-22 21:34:27

标签: javascript if-statement scope

我目前正在阅读一些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来调用?

3 个答案:

答案 0 :(得分:2)

在JavaScript(ES5)中,if语句在使用var声明时不会创建本地范围。使用函数创建局部范围。

答案 1 :(得分:0)

W3Schools因在代码示例中使用不良做法而臭名昭着,您已经找到了一个这样的例子。他们正在创建一个全局范围的变量。

Blocks只会为使用新let keyword声明的变量创建局部范围。如果您使用的是较早版本的JavaScript,或者您使用的是var关键字,则该变量的范围限定为声明变量的最内层function。< / p>

通过var在任何函数之外声明的变量的范围限定为window(全局)范围。

&#13;
&#13;
{
  var x = "hello world";
}
document.getElementById("var-value").innerHTML = x;
&#13;
<span id="var-value"></span>
&#13;
&#13;
&#13;

在上面的代码段中,如果您将var替换为let,则会产生错误,因为x未定义。

&#13;
&#13;
{
  let x = "hello world";
}
document.getElementById("var-value").innerHTML = x;
&#13;
<span id="var-value"></span>
&#13;
&#13;
&#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);