如何加载其他js文件不用于逐个添加变量

时间:2010-09-14 03:12:29

标签: javascript jquery load

这是我的演示代码:

<body onload="initialize()">

<script>
function initialize(){
    var d='adddd'
    $.getScript('other.js', function() {
        a()
    });
}   
</script>
</body>

这是演示other.js:

function a(){
    alert(d)
}

然后,你会发现一个错误:

d is not defined

所以你必须这样做:

function a(d){
        alert(d)
    }

a(d)

如果我们有很多变量,我们必须逐个添加它们,如下所示:

a(d,e,f,r,f,g,,h,e,w)

这是我的梦魇,所以如何加载另一个不用于添加它们的js文件,

接下来是我的原始代码:

    <script type="text/javascript">
        function initialize() {
            var n=0;
            var latlng = new google.maps.LatLng(-34.397, 150.644);
            var myOptions = {
              zoom: 8,
              center: latlng,
              mapTypeId: google.maps.MapTypeId.ROADMAP
            };
            var map = new google.maps.Map(document.getElementById("map_canvas"),
                myOptions);
            $.getScript('_lib/node.js', function() {
                console.log(node)
                var a = new node($('#test'),true);
                var b = new node($('#tabs_'));
            });

        }
    </script>

node.js是:

    function node(obj,is_add_class_name) {
        this.n=0;
        this.setMap(map);
        this.obj=obj;

        this.is_add_class_name=is_add_class_name;
        var me=this;
        $('.delete').click(function(){
            if($('.delete',me.div_)[0]==this){
                me.onRemove()
            }
        })
        map.setOptions({
            draggable:true
        })
    }
    node.prototype = new google.maps.OverlayView();
    node.prototype.onAdd = function() {
        var div = $(this.obj)
        div.show();
        this.div_ = div[0];
        this.addPolygon(new google.maps.LatLng(-34.397, 150.644));
        var panes = this.getPanes();
        panes.overlayLayer.appendChild(div[0]);
    }
    node.prototype.onRemove = function() {
        this.div_.parentNode.removeChild(this.div_);
        this.div_ = null;
    }

但错误是:

map is not defined

node.js与主文档分离,现在我必须调用节点函数使用它:

var a = new node($('#test'),true,map,..other variables in main file );

这是非常复杂的,所以我的问题是如何简单地加载一个js文件,不要使用 发送js所需的每个变量。

感谢

1 个答案:

答案 0 :(得分:0)

您似乎想要的是全局变量。这些通常是不受欢迎的,因为它们的使用可能会导致严重的问题。

在JavaScript中,如果在函数外部声明变量,则它们是全局变量,并且可由任何其他脚本访问。

所以你的示例代码是:

<body onload="initialize()">

<script>
var d='adddd';
function initialize(){
    $.getScript('other.js', function() {
        a()
    });
}   
</script>
</body>

我只是在函数外部移动了d的声明,以便任何其他脚本都可以引用它。

那为什么这被认为是不好的做法?好吧,如果你要组合来自不同来源的许多脚本,并且每个脚本声明它自己的全局变量,那么就无法确保它们不会互相踩踏。进一步的JavaScript有自己的全局变量,如果你跳过将导致很难找到错误。

如果你必须使用全局变量,那么给它们一个名称,表明它们在哪个脚本中被定义,例如:你的例子中的script1_d。这样你就可以确保全局变量具有唯一的名称,并且你知道你正在引用哪一个。