在實際詢問任何事情之前,我會繼續說這是一個理論問題;但是,稍後可能會在網站上實施。在本地範圍內暫時替換全局變量
無論如何,我有一個變量,任何變量。假設它是a
,它的範圍是全局的。現在,對於一個特定的函數,我想將該變量的值設置爲全局值以外的值,但是基於此值,並且沒有全局更改其值。例如:
a = {something: "Safe", other: "Foo"}
function hello(){
var a = a.other; // Foo
a.something; // Undefined
}
a.something; // Safe
a.other; // Foo
與上面的代碼的問題是,當我在函數定義var a
,將已經在本地設置之前,清除了全球a
的價值;換句話說,它會返回類似Can't access property [other] of undefined [a]
。
同樣,a
仍然應該是a
(所以使用另一個變量名稱是不是一個選項,或至少不是理想的)。實際上,全球a
不應該可從功能hello
訪問。
編輯:window
也將被覆蓋與null
,關於米蘭Jaric的答案。
在此先感謝!
這不是我理解你在原始問題中提出的問題。你正在做的是傳遞一個對被賦予'a.other'的對象的引用,你問如何阻止訪問全局* a *,但仍然引用它的屬性。 – RobG
@RobG:當你看這個代碼和單獨的代碼時,它幾乎是一樣的。我只需要訪問*一個*屬性,然後在那裏訪問它;另外,可以防止訪問其他'a'屬性/方法。此外,真的沒有別的辦法。事情不是不可能的*。 – JCOC611
儘管發現由* ab *引用的對象實際上是由* ab *引用的,所以對其他* a *屬性的訪問完全不被阻止,需要幾次猜測,並且考慮到一些假設(即, ,默默無聞的安全不是一個合理的政策)。 – RobG