我目前正在开发一个项目,在某一点上,您可以将Javascript输入到textarea中,然后运行它。有很多后台代码监控页面并发送到服务器数据。所有这些都是在一个私人功能中,所以不能简单地使用控制台。然后唯一的问题是在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>
我也尝试将窗口应用到该函数,但是唉也没有用。
答案 0 :(得分:0)
在已修改版本更改提醒(x)中提醒(此 .x)。 它能解决你的问题吗?
答案 1 :(得分: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>