是否有可能编写一个无法访问全局变量的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"和全局命名空间并返回
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"];
这意味着没有办法使全局作用域不可访问,如果这是一个问题。
相关文章:
- 在page.open()-PhantomJS中无法访问全局变量
- 全局变量只能由第一个函数访问
- 在单独的上下文中运行 js 代码并访问其全局变量
- 如何在 JavaScript 中访问全局变量
- 在这种情况下,如何使变量全局可访问
- Selenium Web驱动程序访问Jquery中的Javascript全局变量
- 从Javascript中的对象方法中访问全局变量
- 在blackberry cascades 10中访问多个qml文件中的全局变量
- 如何将全局变量放在Globals.js模块中,并在其他模块中访问它们
- jQuery访问node.js全局变量
- 无法从打字稿访问全局变量
- 如何在 Node 中访问模块全局变量.js例如浏览器中的 window.variable
- 给我的浏览器一个可通过javascript访问的全局变量
- 未访问全局变量,未运行代码
- 为什么我无法从茉莉花中的 javascript 函数访问全局变量
- TypeScript:从类访问全局变量而不导入
- 当 Node.js 中的参数名称相同时,如何从函数访问全局变量
- jQuery全局变量访问混乱
- 通过全局变量访问具有id的元素
- javascript全局变量访问失败