创建组件核心文件——学习笔记

一般方法:

1  //作为核心文件,先来一个闭包,禁止污染全局空间。
2 (function(){
3     'use strict';//该作用域内的代码使用js的严格模式
4     
5 })();

高big方法:

1 +function(){
2     'use strict';
3     
4 }();

  其实是将一个空与function相加了,相加就是运算,只要运算就会调用函数,函数后面接括号就会执行函数。

  严格模式的目标之一是允许更快地调试错误。帮助开发者调试的最佳途径是当确定的问题发生时抛出相应的错误(throw errors when certain patterns occur),而不是悄无声息地失败或者表现出奇怪的行为(这正是如今不在严格模式下的Javascript做的)。严格模式下的代码抛出更多的错误信息,这是好事,因为它能帮助开发者很快注意到一些必须立即解决的问题。——《是时候开始使用JavaScript严格模式了》

  接着,需要创建全局变量。一般想法如下:

1 + function () {
2     'use strict';
3 
4     var xx = {
5         SmartList: ...
6     };
7 
8 }();

  但是,整个都闭包了,怎么全局?可以修改如下:

1 + function () {
2     'use strict';
3 
4     window.xx = {
5         SmartList: ...
6     };
7 
8 }();

  以上代码写在flexx.js中,现在创建main.js来看看我们在flexx.js中创建的全局变量是否成功。首先在index.html中按顺序引入js文件。

  现在两个js文件内容如下:

  在flexx.js中创建了全局变量xx,在main.js中调用了xx,结果自然是没问题的。

  我们有时可以先判断一下,这样更好,以免重复多次引入。

1 + function () {
2     'use strict';
3     if (!window.xx) {
4         window.xx = {};
5     }
6 
7 }();

  上面的代码,还可以这样改一下:

1 + function (Flexx) {
2     'use strict';
3 
4 }(window.xx ? window.xx : window.xx = {});

  如果有xx了,就用这个xx,如果没有就创建一个xx 为 {} ,最终把xx 作为参数传入这整个闭包。我们可以为xx在函数内部起一个别名,在库内部用一个正式的名字,易懂的名字,比如这里取的是Flexx,xx是短名,为了调用方便。三目的好处还有,我其他组件也可以这么写。那么,组件的js 就不存在引入的先后顺序了。

  其实,上面的代码还可以让big更高一点:

1 + function (Flexx) {
2     'use strict';
3 
4 }(window.xx = window.xx || {});

 

 

最后,感谢大神CX的讲解。

posted @ 2015-12-29 10:25  lovelyun  阅读(229)  评论(0编辑  收藏  举报