javascript - 如何获取被遮蔽的全局变量的值?
示例:
var test = 'global value';
(function() {
var test = 'local value';
// how to get the 'global value' string
})();
鉴于宿主环境未知,这意味着我们不能假设全局对象可以通过 window 名称访问。此外,该函数不允许接收任何参数!
答案#1
解决方法
var test = 'global value';
(function() {
var test2 = 'local value';
console.log(test);
})();
真正的解决办法是修复你的代码,这样你就不会遮蔽你关心的全局变量。
评估工作方法
你总是可以使用全局 eval,它是最可靠的。
例子
var test = 'global value';
function runEval(str) {
return eval(str);
}
(function() {
var test = 'local value';
console.log(runEval("test"));
})();
如果你不想定义全局 eval,你可以使用 Function 间接实现
实时示例
var test = 'global value';
(function() {
var test = 'local value';
console.log(new Function ("return test;") () );
})();
杂项黑客技巧
在非严格模式下,以下有效
(function () {
var test = "shadowed";
console.log(this !== undefined && this.test);
})();
而且这个技巧在有缺陷的实现中也有效
(function() {
var test = 'local value';
try { delete test; } catch (e) { }
console.log(test);
})();
答案#2
依靠它的 this 作为全局对象(没有显式引用 window)怎么样。
console.log(this.test);
jsFiddle。
你也可以使用对 eval() 的间接调用(execScript() 是为 IE 而存在,但正如你提到的不假设浏览器,可以随意忽略)。
console.log((window.execScript || eval)('test'));
jsFiddle。
