我见过一些使用匿名立即调用函数进行封装的代码是这样的
(function(){
var ABC = ...
function XYZ(){
....
}
})();
ABC 或 XYZ() 是否完全不可访问(通过脚本注入(inject)/劫持)?
最佳答案
一旦作用域中有 0 个变量引用其中之一,对象 O 在作用域中“完全不可访问”
- 对象本身
- O 是其后代属性的任何对象
- 已关闭上述任一功能的函数
在这种情况下,以上都不可用:您没有对 IIFE 范围之外的 ABC
内容的引用,也没有对它的任何对象的引用是的属性(property)。这意味着它现在无法访问。但是,如果您使用 XYZ
关闭 ABC
,并返回 XYZ
,现在可以访问 ABC
通过 XYZ
:
var outerXYZ = (function(){
var ABC = "foo";
function XYZ(){
return ABC;
}
return XYZ;
})();
// no way to access ABC directly, but
var outerABC = outerXYZ();
脚本注入(inject)/劫持部分过于模糊,无法有意义地回答。
关于javascript - 局部函数/变量封装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14082444/