请教一个关于javascript的作用域问题-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

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

kung-yeh 2014-07-24 13:25:00 5780
一个文件中引用两个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);
运行之后,会有很多冲突,怎么才能避免这种情况发生呢?


JavaScript 前端开发
分享到
取消 提交回答
全部回答(4)
  • programmer
    2014-07-24 17:19:09
    Re请教一个关于javascript的作用域问题
    既然是一样的为什么不能保留一份复用呢?

    想低耦合的话还可以试试各自封装成对象然后用事件来触发。
    0 0
  • zhedianshi
    2014-07-24 16:52:02
    楼主应当蛋疼的是,如果a文件和b文件中还有互相引用的数据,那该怎么办?
    简单的解决办法是用命名空间来控制,也就是命名个对象来控制作用域。
    复杂就用AMD或者CMD的模块加载器来实现了。
    比如require js或者seajs
    0 0
  • 二等公民
    2014-07-24 16:26:25
    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);
    })();


    0 0
  • chu-keh
    2014-07-24 14:37:02
    Re请教一个关于javascript的作用域问题
    两个文件下载好后,解析的时候都在同一个javascript顶级作用域下面 ,相当于一个js文件放了重复了两遍相同代码,不冲突才怪....

    解决方法是:

    把他们的作用域独立开,用匿名函数包起来,因为是操作DOM的,所以要DOM Ready下
    给重复的变量,函数改名字
    ...我是小菜,等大神来回答
    0 0
添加回答
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程