執行javascript函數時,如何決定使用的變量是本地還是全局?因爲我只想記錄對全局變量的修改。如何在javascript中檢查變量是本地還是全局?
<script>
var a;
a =4;
function foo(){
var a =3;
}()
</script>
當執行上面的代碼時,我只想記錄a = 4,而不是a = 3;
執行javascript函數時,如何決定使用的變量是本地還是全局?因爲我只想記錄對全局變量的修改。如何在javascript中檢查變量是本地還是全局?
<script>
var a;
a =4;
function foo(){
var a =3;
}()
</script>
當執行上面的代碼時,我只想記錄a = 4,而不是a = 3;
<script>
var a;
a = 4;
function foo(){
// version 1:
if (window.hasOwnProperty('a')){
// "global" a exists
}
// version 2:
if (typeof window.a !== 'undefined'){
// "global" a exists and is defined
}
}();
</script>
這樣的事情?
全局變量作爲全局對象的屬性添加,即瀏覽器中的窗口。爲了測試對象具有的屬性或沒有,使用in
操作符:
// In global scope
var bar;
function foo() {
if (bar in window) {
// bar is a property of window
} else {
// bar isn't a property of window
}
}
對於更一般代碼,環境可能不具有窗口對象,所以:
// In global scope
var global = this;
function foo() {
if (bar in global) {
// bar is a property of the global object
} else {
// bar isn't a property of the global object
}
}
當心typeof測試。他們只告訴你變量值的類型,並返回undefined如果屬性不存在或它的值已被設置爲undefined。
我知道這個問題很老,但我一直在尋找同樣的東西。當我無法找到答案,我結束了想出這樣的:
<script>
var a;
a = {prop1: 'global object'};
(function foo() {
var a = {prop1: 'local object'};
var isLocal = true;
if (window.hasOwnProperty('a')) {
if(Object.is(a, window['a'])) {
isLocal = false;
}
}
})();
</script>
如果一個變種是一個原始值,然後Object.is()將始終返回true,所以你需要一些其他的對付他們的方式。
我不認爲你可以像你想要的範圍內訪問同名變量。解決方案:如果您需要訪問兩者,請使用唯一名稱。 –
'window.a'應該引用全局變量,但我從來沒有這樣做過(在不同的範圍中重複使用相同的變量名),所以我不知道潛在的注意事項。 – Jasper
我想用JavaScript代碼來記錄對全局變量的修改。上面的代碼只是一個例子。 – user2751079