是否有任何方法可以访问外部范围's变量
Is there any way to access an outer scope's variable once the present scope has defined one of the same name?
这似乎不是:
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
,而是在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
不过,这在严格模式下不起作用,因为this
将是i
中的undefined
。
在浏览器上,全局对象有一个属性window
,它用来引用自己,所以您不必像上面的那样依赖this
:
// Browsers only
var v = 1;
function i() {
var v = 2;
console.log("v == " + v);
console.log("window.v == " + window.v);
}
i();
这可以在严格模式或宽松模式下工作,但仅适用于浏览器。
但全球范围是一个特例。对于你引用的代码,不,没有办法到达那里。
相关文章:
- ngDialog-弹出窗口未更新范围变量
- AngularJS范围变量Unwatch
- 将外部控制器的范围变量设置为角度
- 对于使用传递的数据计算的局部范围变量,角度绑定在自定义指令中不起作用
- 如何使用EnquireJS使AngularJS范围变量依赖于媒体查询
- 具有范围变量的控制器不工作
- 范围变量返回长度错误
- 将 NodeJS 模块范围变量作为对象访问
- Angularjs 更新 setTimeout 中的范围变量不起作用
- 递归承诺调用 - 内存范围变量问题
- AngularJS:从指令设置范围变量
- Angularjs:访问范围变量数组并计算平均值
- 范围变量更新,但不更新视图
- 从html调用angularjs控制器中的一个函数,但未定义范围变量
- 如何在编辑范围变量时(暂时)避免摘要循环
- 防止Angular范围变量通过引用自动绑定到服务私有成员
- 使用 AngularJS 从指令设置范围变量
- 集合回调忽略范围变量
- 使用forEach修改角度范围变量
- 因果报应测试中未定义的预期范围变量