在写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);