javascript - 局部函数/变量封装

标签 javascript code-injection

我见过一些使用匿名立即调用函数进行封装的代码是这样的

(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/

相关文章:

c# - 在回发问题上使用 javascript 在 gridview 中选择全部

Javascript平滑滚动冲突

css - 一种阻止富媒体(Flash)广告更改页面上的 CSS 元素的方法?

mysql - 使用 PDO 安全地将值插入 MySQL 表

PL/SQL 中的 SQL 注入(inject) - 神话还是事实?

javascript - 为什么将构造函数直接放入变量中?

c# - javascript:如何将安全字符串传递给客户端显示的数组而不弄乱它/ASP.NET C#

javascript - 我如何扩展媒体查询?

java - 我可以从内部类访问注入(inject)的 ejb 吗?

python - 安全的 Python Markdown 库