Javascript:避免全局变量的模式

时间:2011-02-22 00:03:14

标签: javascript scope

我认为这是一个简单的问题。想象一下,你有一个初始化名为channel的JS变量的页面:

<html>
<script>
$(document).ready(function() {
   ...
   var channel = new Channel();
   channel.send("helo");
}
</script>
<body>
    <div id="placeholder"></content>
</body>
</html>

该页面还包含一个id =“placeholder”的div,其内容使用AJAX加载。该外部内容必须访问channel变量。

有关存储变量的位置的任何良好做法或建议吗?以下代码有效,但我不喜欢它:

<html>
<script>
    var channel;
    $(document).ready(function() {
       ...
       channel = new Channel();
       channel.send("helo");
    }
</script>
...
</html>

谢谢。

2 个答案:

答案 0 :(得分:1)

不,在这种情况下没有别的方法,因为全局范围是两个脚本共享的唯一范围(编辑:嗯,我想这取决于你实际添加内容的方式。你怎么做?

您唯一能做的就是通过将对象用作命名空间来最小化全局变量的数量:

var your_namespace = {};
$(document).ready(function() {
   ...
   your_namespace.channel = new Channel();
   your_namespace.channel.send("helo");
}

答案 1 :(得分:0)

您可以将加载AJAX函数放在匿名函数内部,该函数在DOM与通道变量一起加载时执行。然后,两者都将仅限于其中的匿名函数和范围。