新足迹

 找回密码
 注册

精华好帖回顾

· 墨尔本一日游 (2010-5-9) dickson · 昏天黑地打工记(外加稀里糊涂闯江湖) (2004-12-10) horseanddragon
· 甜蜜蜜~~~马卡龙甜到心里,更新50楼马卡龙棒棒糖 (2012-12-5) junni813 · 西安小吃—浆水面(29#楼新添菠菜面图片) (2008-4-15) bluesummer
Advertisement
Advertisement
查看: 1481|回复: 10

自己写一小段js代码 关于self executing function的everything [复制链接]

发表于 2011-7-6 11:27 |显示全部楼层
此文章由 o2h2o 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 o2h2o 所有!转贴必须注明作者、出处和本声明,并保持内容完整
写自己的library 的时候 貌似可以这样用
保护了变量 也能export 函数去外部
欢迎大牛斧正

var out=6;
(function(){
    var inside=5;
    alert(out); //showing 6
    function show(){
            alert("show function")
    }
// use this to export inside function to outside
    var show2=this.show2=function(){

            alert("show 2");
    }
})();
alert(typeof inside) //undefined

show2(); //yes, can be called
show(); //undefined

[ 本帖最后由 o2h2o 于 2011-7-6 10:56 编辑 ]

评分

参与人数 1积分 +5 收起 理由
乱码 + 5 你太有才了

查看全部评分

Advertisement
Advertisement

发表于 2011-7-6 11:33 |显示全部楼层
此文章由 porcorosso 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 porcorosso 所有!转贴必须注明作者、出处和本声明,并保持内容完整
沙发

2010年度奖章获得者

发表于 2011-7-6 11:33 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
有点像delegate的意思,是吧。

发表于 2011-7-6 11:35 |显示全部楼层
此文章由 o2h2o 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 o2h2o 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 dalaohu 于 2011-7-6 10:33 发表
有点像delegate的意思,是吧。

不太一样
这个代码 
关键是怎么样不污染全局变量的情况下 又能 create 函数给全局来调用
类似其他的全变成 private 了 只有输出才变成 public
js 函数可以作为类似指针一样的 东西 所以可以很灵活

看 john resig 就是用这个模式写library的

[ 本帖最后由 o2h2o 于 2011-7-6 10:38 编辑 ]

特殊贡献奖章

发表于 2011-7-6 11:44 |显示全部楼层
此文章由 kr2000 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 kr2000 所有!转贴必须注明作者、出处和本声明,并保持内容完整
你这行
show2=this.show2=function(){
直接写成
show2=function(){
也可以工作
写成
show2=function show3(){
show2可以
show3不行

来一点具体的解释?

发表于 2011-7-6 11:46 |显示全部楼层
此文章由 o2h2o 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 o2h2o 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 kr2000 于 2011-7-6 10:44 发表
你这行
show2=this.show2=function(){
直接写成
show2=function(){
也可以工作
写成
show2=function show3(){
show2可以
show3不行

来一点具体的解释?

在 self executing 函数的 外部调用
关键是 show2=this.show2 这句
把show2 引用到外部了

self executing function 里面的 所有的东西  就是你的 library


show2=function show3()
这个写法不太好
用匿名的最合适 你不需要任何函数名在这里
show2=function() 比较合适

javascript 太危险 
一不当心就把变量 和函数名给覆盖,重定义了
所以为什么能用var 的时候 尽量用var ,不然就变成全局的了
能用匿名函数就用匿名函数
能不污染全局变量就别污染全局变量


不然写长篇的library 很容易出错

[ 本帖最后由 o2h2o 于 2011-7-6 10:54 编辑 ]

评分

参与人数 1积分 +5 收起 理由
kr2000 + 5 感谢分享

查看全部评分

Advertisement
Advertisement

特殊贡献奖章

发表于 2011-7-6 11:53 |显示全部楼层
此文章由 kr2000 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 kr2000 所有!转贴必须注明作者、出处和本声明,并保持内容完整
直接写show2=function()或this.show2=function()有神马问题?
我可以run show2呀

看完你编辑以后的明白了一些
原帖由 o2h2o 于 2011-7-6 10:46 发表

在 self executing 函数的 外部调用
关键是 show2=this.show2 这句
把show2 引用到外部了

self executing function 里面的 所有的东西  就是你的 library

[ 本帖最后由 kr2000 于 2011-7-6 10:54 编辑 ]

发表于 2011-7-6 12:00 |显示全部楼层
此文章由 o2h2o 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 o2h2o 所有!转贴必须注明作者、出处和本声明,并保持内容完整
javascript 现在在 非web 的情况下面
也变成主流的 scripting language了,特别是某些公司的新产品新框架

例如 unit3d,titanium,nodejs 之类的 很多很多

[ 本帖最后由 o2h2o 于 2011-7-6 11:01 编辑 ]

发表于 2011-7-6 12:19 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
独立的js 文件,加载 这个文件在head里,你就可以call $c.d2.test2("aaaa")
或者cad.d2.test2("aaaa")
这里的顶级 name space是$c, 为了不同$冲突,
二级name space 是d2
但是最后1行代码我觉得有问题,还在思考中,因为window下面很可能会有两个不同变量指向两个不同的内存块,所以要用另外一个方式来使$c指向 CAD
(function(){
   if (typeof window.cad == "undefined"){
        window.cad = {
            test1:function(str){alert(str);},
            d2:{
              test2:function(str){alert(str);}
            },
            dm:{
               test2:function(str){alert(str);}
            }
        };
    }

})();

window.$c = cad;

[ 本帖最后由 典 于 2011-7-6 11:28 编辑 ]

发表于 2011-7-6 12:43 |显示全部楼层
此文章由 o2h2o 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 o2h2o 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 于 2011-7-6 11:19 发表
独立的js 文件,加载 这个文件在head里,你就可以call $c.d2.test2("aaaa")
或者cad.d2.test2("aaaa")
这里的顶级 name space是$c, 为了不同$冲突,
二级name space 是d2
但是最后1行代码我觉得有问题,还在思考中,因为window ...

哪一行啊?
also 这个代码不只是执行在 browser environment里面的
有可能是native run的
在 nodejs 或者是 titanium 这样的环境

你说的好像是另外一种模式
就是 
var zenmeo={}
然后 
zenmeo.myfunc1=function(){};
这样的把

我觉得
第一种适合export 少量函数的 (重名概率小)
第二种适合export 大量函数的
 

[ 本帖最后由 o2h2o 于 2011-7-6 11:55 编辑 ]

发表于 2011-7-6 12:46 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 o2h2o 于 2011-7-6 11:43 发表

哪一行啊?
also 这个代码不只是执行在 browser environment里面的
有可能是native run的
在 nodejs 或者是 titanium 这样的环境

 



Or, 那就不能用window了
对,就是适合构建一个自己的library, 完全类似jQuery的模式
但是道理是一样的

我想 window.$c=window.cad 是不对的,因为系统里边会产生两个内存块,所以要用this/that ,使 $c返回cad,        类似 $返回jQuery

[ 本帖最后由 典 于 2011-7-6 11:52 编辑 ]
Advertisement
Advertisement

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部