一旦当前范围定义了同一个名称,有没有办法访问外部范围的变量?

时间:2013-11-25 13:51:39

标签: javascript

似乎不是:

function o(){
  var v = 1;
  function i(){
    var v = 2;
    // any way at all, now, to access the 1 value?
  }
}

但是有吗?

1 个答案:

答案 0 :(得分:4)

不,在i v符号内完全遮蔽了v中的o,并且没有其他方法可以实现它。使用该代码,i无法获得o的{​​{1}}。

当然,如果你为变量使用了不同的名称,那么问题就会消失。 : - )


如果代替v您在全局范围内拥有代码,则可以将o作为全局对象的属性进行访问,因为当您全局声明变量时,它成为全局对象的属性。例如,这将在松散模式下工作:

v

哪个会显示

v == 2;
this.v == 1

但这不适用于严格模式,因为var v = 1; function i() { var v = 2; console.log("v == " + v); console.log("this.v == " + this.v); } i(); // Calling it like this makes `this` within the call the global object this内会undefined

在浏览器上,全局对象有一个属性i,它用于引用自身,因此您不必像上面那样依赖window

this

无论是严格模式还是宽松模式,都只能在浏览器中使用。

但全球范围是一个特例。对于你引用的代码,不,没有办法到达那里。

相关问题