js经典错误之变量申明

在写js的时候不经意间犯了一个经典的js错误,mark一下,长点记性。

(function(w, d, $) {
    /**
     * 这是基础对象,很多页面元素都基于这个定义组件如:AUI.DataGrid等。
     * 页面多次引用此文件。防止其他的插件被覆盖。先判断是否已经什么,不重复声明
     */
    if(typeof w.AUI == 'undefined') {
        var AUI = w.AUI = {};
    }
    
    AUI.Class = {...}
})(window, document, jQuery);

 

这样写乍一眼看没问题,其实犯了一个经典的js变量声明的错误。页面应用多次时,后面几个应用会在 AUI.Class定义处报 undefined 错误。

始终记住:js变量的作用域是函数级而不是块级,且定义都会提前。

 

修改后:

(function(w, d, $) {
    /** 不重新加载,重新加载会将AUI命名空间下所有组件删掉 **/
    var AUI;
    if(typeof w.AUI == 'undefined') {
        AUI = w.AUI = {};
    } else {
        AUI = w.AUI;
    }

    ....
})(window, document, jQuery);

 

 

 

你可能感兴趣的:(js)