0

我不明白这一点-如何在条件var内定义的 a 在该if条件之外使用?

示例 JS:

if (1===2) {
  var myVar = "I live in brackets";
}
$("#debug").append("myVar = " + myVar);
$("#debug").append("but I'm about to throw a 'not defined' exception right... now " + firstAppearanceVar);

渲染:myVar = I live in brackets

的范围不myVar只是在那个if (1===2)条件之内吗?

4

4 回答 4

2

范围仅适用于函数,不适用于其他块。

于 2013-02-28T19:16:08.553 回答
2

Javascript 没有作用域,它只有函数作用域

换句话说,由 声明的变量可以在函数var范围内访问,无处不在,就在那里,而不是在外面。

于 2013-02-28T19:16:16.063 回答
1

由于提升,每个变量声明都会弹出到函数范围的顶部。

alert(foo); // undefined (no error because of the hoisting.)
var foo = 2;
alert(bar); Error
于 2013-02-28T19:17:16.660 回答
0

定义 javascript 变量时,声明被提升到函数范围的顶部。

所以这:

if (1===2) {
  var myVar = "I live in brackets";
}
$("#debug").append("myVar = " + myVar);
$("#debug").append("but I'm about to throw a 'not defined' exception right... now " + firstAppearanceVar);

相当于这个

var myVar;
if (1===2) {
  myVar = "I live in brackets";
}
$("#debug").append("myVar = " + myVar);
$("#debug").append("but I'm about to throw a 'not defined' exception right... now " + firstAppearanceVar);

因此,在函数中定义的任何变量都可以在该函数的任何位置或任何内部函数内部访问。它们在函数之外是不可访问的。

所以

(function(){
    if (1===2) {
      var myVar = "I live in brackets";
}}())
$("#debug").append("myVar = " + myVar); //reference exception
于 2013-02-28T19:23:08.450 回答