开发者社区> 问答> 正文

请教一个关于javascript的作用域问题

一个文件中引用两个js文件,a.js和b.js。其中a.js和b.js文件中,有很多名称相同的函数和变量。例如a.js中有:
var started = false;
var startX, startY;
function doMouseDown(event) {
    startX = event.pageX;
    startY = event.pageY;
    started = true;
}

var c = document.getElementById('s');
c.addEventListener("mousedown", doMouseDown, false);
b.js文件中也有很多类似的代码:
var started = false;
var startX, startY;
function doMouseDown(event) {
    startX = event.pageX;
    startY = event.pageY;
    started = true;

}

var c = document.getElementById('a');
c.addEventListener("mousedown", doMouseDown, false);
运行之后,会有很多冲突,怎么才能避免这种情况发生呢?


展开
收起
kung-yeh 2014-07-24 13:25:00 6285 0
4 条回答
写回答
取消 提交回答
  • Re请教一个关于javascript的作用域问题
    既然是一样的为什么不能保留一份复用呢?

    想低耦合的话还可以试试各自封装成对象然后用事件来触发。
    2014-07-24 17:19:09
    赞同 展开评论 打赏
  • 楼主应当蛋疼的是,如果a文件和b文件中还有互相引用的数据,那该怎么办?
    简单的解决办法是用命名空间来控制,也就是命名个对象来控制作用域。
    复杂就用AMD或者CMD的模块加载器来实现了。
    比如require js或者seajs
    2014-07-24 16:52:02
    赞同 展开评论 打赏
  • Re请教一个关于javascript的作用域问题
    嗯,用函数包起来
    (function(){
        var started = false;
        var startX, startY;
        function doMouseDown(event) {
            startX = event.pageX;
            startY = event.pageY;
            started = true;
        }

        var c = document.getElementById('s');
        c.addEventListener("mousedown", doMouseDown, false);
    })();


    2014-07-24 16:26:25
    赞同 展开评论 打赏
  • Re请教一个关于javascript的作用域问题
    两个文件下载好后,解析的时候都在同一个javascript顶级作用域下面 ,相当于一个js文件放了重复了两遍相同代码,不冲突才怪....

    解决方法是:

    把他们的作用域独立开,用匿名函数包起来,因为是操作DOM的,所以要DOM Ready下
    给重复的变量,函数改名字
    ...我是小菜,等大神来回答
    2014-07-24 14:37:02
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
JavaScript异步编程 立即下载
Delivering Javascript to World 立即下载
编程语言如何演化-以JS的private为例 立即下载