是否可以编写无法访问全局变量的 JS 函数?

Is it possible to write a JS function with no access to global variables?

为了更好地了解函数的用途等。 如果不访问全局范围,变量查找也可能更快?

假设我有:

a = 5;
b = 5;

在全球范围内。是否可以将下面的函数包装成

function go() {
   console.log(a);
}

将无法访问 "a" 和全局命名空间以及 return

Uncaught ReferenceError: a is not defined

不,没有办法完全阻止对全局变量的访问。也就是说,您 可以 为它提供一组 不同的 全局变量:即 运行 它在 iframe 中。不过,这不是万无一失的,因为它可以只使用 window.parent 来访问父级的全局变量。

是的。下面的示例直接来自 MDN eval

您可以试试这个 IF 您可以将整个代码库包装在一个包装函数中,以便所有对象和函数都属于本地范围。 (我不确定这是否可行,但它适用于 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"];

这意味着没有办法使全局范围不可访问,如果这是一个问题。