[英]Is it possible to write a JS function with no access to global variables?
為了更好地了解函數的使用情況等,如果不訪問全局范圍,變量查找可能會更快嗎?
假設我有:
a = 5;
b = 5;
在全球范圍內。 是否可以將下面的函數包裝起來
function go() {
console.log(a);
}
將無法訪問“a”和全局命名空間並返回
Uncaught ReferenceError: a is not defined
不,沒有辦法完全阻止訪問全局變量。 也就是說,您可以為它提供一組不同的全局變量:即在iframe
運行它。 但這不是防彈的,因為它可以只使用window.parent
來訪問父級的全局變量。
是。 以下示例直接來自MDN eval 。
你可以試試這個, 如果你能包住整個代碼庫在一個單一的包裝功能,使你的所有對象和函數陷入局部范圍。 (我不確定這是多么切實可行,但它適用於Chrome和Firefox)
(function() {
var x = 2, y = 4;
function range(a,b){return [a,b];}
console.log("DIRECT", eval("x + y"), eval("range(3,4)")); // Direct call, uses local scope, result is 6
var geval = eval;
console.log("INDIRECT", geval("x + y"), geval("range(3,4)")); // Indirect call, uses global scope, throws ReferenceError because `x` is undefined
})()
我相信無論目前的范圍是什么,總有一種方法可以達到全局對象:
let ref_to_global = (function(){
return this;
}).call(null);
然后可以直接訪問全局對象的任何屬性:
let value = ref_to_global["a"];
這意味着如果這是一個問題,就無法使全局范圍無法訪問。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.