我想在这个例子中得到 "a, b" https://jsfiddle.net/8dw9e5k7/ 而不是我得到别的东西。可能吗?
function test() {
a = 5;
b = 10;
try {
var variables = ""
for (var name in this)
variables += name + "\n";
alert(variables);
} catch(e) {
alert(e.message)
}
}
test();
答案 0 :(得分:2)
在函数中分配不存在的变量会使变量全局,这意味着附加到 window
对象。这就是为什么您的代码在某种程度上起作用并显示变量以及许多其他内容的原因,因为 this
指的是 window
。
不可能以干净的方式转储您自己的附加到 window
的变量(一些黑客仍然存在,包括使用 window
创建新的 iframe
并将其与当前window
,如果您有兴趣,请查看此answer)
现在,如果您希望 this
引用当前函数的词法作用域,情况并非如此,您根本无法以编程方式检索它。