1

我目前正在开发一个项目,该项目允许您在文本区域中输入 Javascript 并运行它。有很多后台代码监控页面并向服务器发送数据。所有这些都在一个私有函数中,因此无法简单地使用控制台闯入。那么唯一的问题是在 textarea 输入的代码在包含服务器函数的私有函数内部进行评估,从而使其能够访问站点的内部。我怎样才能隔离它并使它的范围在私有函数之外?下面是一个例子:

<script>

var x = 2;
(function(){
    var x = 10;
    var elem = document.createElement('button');
    elem.addEventListener('click',function(){
        alert(x);
    });
    document.body.appendChild(elem);
})();

</script>

在此示例中,我希望 x 在按下按钮时返回 2 而不是 10。从而迫使它像在全局范围内一样运行。

编辑

我已经尝试将函数绑定到似乎正在走正确路径的窗口,但没有达到我想要的效果。

<script>

var x = 2;
(function(){
    var x = 10;
    var elem = document.createElement('button');
    elem.addEventListener('click',(function(){
        alert(x);
    }).bind(window));
    document.body.appendChild(elem);
})();

</script>

我也尝试将窗口应用于该功能,但可惜也没有用。

4

2 回答 2

0

在您编辑的版本中,将 alert(x) 更改为 alert( this .x)。它解决了你的问题吗?

于 2013-02-03T16:06:37.377 回答
0

事实证明,答案比我想象的要简单得多。一个在全局范围内但在封闭函数之外的函数,可以被任何函数调用,但它只能访问全局范围内的变量。因此,下面的示例完美运行。

<script>

var run = function(){alert(x);};
var x = 2;
(function(){
    var x = 10;
    var elem = document.createElement('button');
    elem.addEventListener('click',run);
    document.body.appendChild(elem);
})();

</script>
于 2013-02-03T16:58:58.573 回答