如何将javascript函数锁定到本地范围?我想阻止它使用全局变量

时间:2011-05-21 18:23:28

标签: javascript function scope global-variables global

有没有办法阻止函数使用全局变量,如documentwindownavigator和其他声明的全局函数?

EDIT1:如果我可以选择哪些受限制的全局对象会很棒,因为我想允许该函数用作示例Math对象及其函数......

2 个答案:

答案 0 :(得分:5)

  
    

有没有办法阻止函数使用全局变量,如文档,窗口,导航器和其他声明的全局函数?

  

不,除非......

这项任务唯一可行的方法是,如果可以改变函数的 lexical 范围 - 也就是说,源被修改以某种方式,例如包裹它如下图所示。

想象:

;(function () {
    var window = "Hello"

    // original content
    function foo () {
        alert(window)
    }
    foo()

})()

这种方法经常在库中用于创建私有命名空间,但在这些情况下,原始源也是可用的并且在设计时考虑到了这一点。我之前使用此document更改本地版本的jQuery。

虽然with最初可能看起来很有希望,但重要的是要意识到它只是一个词汇构造,并且不会引入动态变量。

快乐的编码。

答案 1 :(得分:0)

您可以要求您的用户将自己限制为ADsafe代码。来自网站:

  

ADsafe可以安全地将访客代码(例如第三方脚本广告或小部件)放在网页上。 ADsafe定义了一个强大的JavaScript子集,允许访客代码执行有价值的交互,同时防止恶意或意外损坏或入侵。 ADsafe子集可以通过JSLint等工具进行机械验证,因此无需人工检查即可查看访客代码的安全性。 ADsafe子集还实施了良好的编码实践,增加了访客代码正确运行的可能性。

如果勾选右侧框,JSLint将验证代码是否符合ADsafe,因此可以安全地在您的网站上执行。