我见过一些使用匿名立即调用函数进行封装的代码看起来像这样
(function(){
var ABC = ...
function XYZ(){
....
}
})();
ABC 或 XYZ() 是否完全无法访问(通过脚本注入/劫持)?
我见过一些使用匿名立即调用函数进行封装的代码看起来像这样
(function(){
var ABC = ...
function XYZ(){
....
}
})();
ABC 或 XYZ() 是否完全无法访问(通过脚本注入/劫持)?
一旦范围内有 0 个变量引用其中任一
在这种情况下,上述任何一项都不可用:您没有ABC
对 IIFE 范围之外的内容的引用,并且您没有对作为其属性的任何对象的引用。这意味着它现在无法访问。但是,如果您要关闭ABC
,XYZ
并返回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();
脚本注入/劫持部分太模糊,无法有意义地回答。
在您提供的示例中,变量和函数在自调用函数范围之外是完全不可访问的