Javascript 有没有办法访问外部范围';在当前作用域定义了一个相同的名称后,是否使用s变量?
似乎不是:Javascript 有没有办法访问外部范围';在当前作用域定义了一个相同的名称后,是否使用s变量?,javascript,Javascript,似乎不是: function o(){ var v = 1; function i(){ var v = 2; // any way at all, now, to access the 1 value? } } 但是有吗?没有,在i中,v符号完全遮蔽了o中的v,没有其他方法可以达到它。有了这个代码,i就无法到达o的v 当然,如果您对变量使用不同的名称,那么问题就不会出现了。:-) 如果在全局范围内没有代码,而不是o,则可以将v作为全局对象的属性进行访问,因为当全
function o(){
var v = 1;
function i(){
var v = 2;
// any way at all, now, to access the 1 value?
}
}
但是有吗?没有,在
i
中,v
符号完全遮蔽了o
中的v
,没有其他方法可以达到它。有了这个代码,i
就无法到达o
的v
当然,如果您对变量使用不同的名称,那么问题就不会出现了。:-)
如果在全局范围内没有代码,而不是
o
,则可以将v
作为全局对象的属性进行访问,因为当全局声明变量时,它将成为全局对象的属性。例如,这将在松散模式下工作:
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
那会显示
v == 2;
this.v == 1
它可以在严格模式或松散模式下工作,但只能在浏览器中工作
但全球范围是一个特例。对于您引用的代码,不,没有办法到达那里。如果您所指的“外部范围”是全局变量,那么浏览器将它们公开为window.varname
,这意味着答案是“是的,它们是可访问的”。我知道这并不能回答关于范围的其他层的问题,但是对于globals,你有一个选择。
// Browsers only
var v = 1;
function i() {
var v = 2;
console.log("v == " + v);
console.log("window.v == " + window.v);
}
i();