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 无法访问 ov

当然,如果您对变量使用不同的名称,这个问题就会消失。 :-)


如果不是 o 而不是 global 范围内的代码,您可以将 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

That wouldn't work in strict mode, though, because this would be undefined within i.

On browsers, the global object has a property, window, it uses to refer to itself, so you wouldn't have to rely on this as with the above:

// Browsers only
var v = 1;
function i() {
    var v = 2;
    console.log("v == " + v);
    console.log("window.v == " + window.v);
}
i();

这在严格模式或松散模式下都有效,但仅在浏览器中有效。

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

关于javascript - 一旦当前范围定义了一个相同名称的变量,是否有任何方法可以访问外部范围的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20194836/

相关文章:

javascript - Node.js Express 和 EJS 将对象传递给模板

javascript - 未找到 AngularJS 页面。主页已注入(inject)索引模板,但未注入(inject)其他页面

javascript - JS : Detect key pressed in text input from onkeydown() inline function

javascript - 想要改变SVG线条元素的垂直位置

javascript - 如何将文件上传选择插入到 GridView 中,然后添加新行?

javascript - 我可以使指令的嵌入范围与父指令相同吗?

javascript - 如何为 mediaRecorder API 将多个音轨合并为一个?

javascript - 在对象数组中查找完全相同对象的索引的最佳方法(键是动态的)

javascript - jQuery 将 child 的子部分元素移动到其父元素并删除其他元素

javascript - 绝对定位时使 <div> 缩放到内容?