有没有办法检测变量是否在函数范围内全局定义?
答案 0 :(得分:5)
您可以对全局对象使用in
。
'myvar' in window
例如......
alert( 'setTimeout' in window ); // true
答案 1 :(得分:2)
if( typeof window.myvar != "undefined") { /* variable is global */ }
else { /* variable is local */ }
答案 2 :(得分:1)
浏览器环境中的全局对象始终是 窗口 。所以你可以检查,是否 窗口[ 'yourprop'] 存在,看它是否是全球性的。
答案 3 :(得分:1)
var a = 1;
(function() {
var b = 2;
}());
alert(window.a);
alert(window.b);
喜欢那个?
答案 4 :(得分:0)
也许使用window.variable === variable
?例如:
var a = 5;
var b = 5;
function tst()
{
var a = 4;
alert(a === window.a); // Returns false because 'a' is local
alert(b === window.b); // Returns true because 'b' is global
}
答案 5 :(得分:0)
您可以为窗口[varName]指定“unique”,然后测试实际值是否匹配:
varName = "myvar"
isGlobal = false
test = "some unique string"
savedValue = window[varName]
window[varName] = test
try {
isGlobal = eval(varName + "==='" + test + "'")
} catch(e) {}
window[varName] = savedValue
如果isGlobal
是全局的,并且未在当前范围内隐藏,则 true
将为myvar
。