似乎不是:
function o(){
var v = 1;
function i(){
var v = 2;
// any way at all, now, to access the 1 value?
}
}
但是有吗?
答案 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
无论是严格模式还是宽松模式,都只能在浏览器中使用。
但全球范围是一个特例。对于你引用的代码,不,没有办法到达那里。