日期:2014-05-16  浏览次数:20365 次

使用哪种方式比较好?请教
主要是2种方式:

第一种:
JScript code

(function(){
    window.r_soft= new Object();
    function tests(){
        alert("SS");
    }
    window.r_soft.tests = tests;
})();


html可以通过调用r_soft.tests()调用
我的理解: 通过自执行方式 把r_soft作为全局对象使用

第二种:
JScript code

var r_soft= new Object();
r_soft.tests = function(){
    alert("SS");
}




同样也可以通过r_soft.tests()调用
我的理解也是r_soft作为全局对象使用。。。  

问题:
1:为啥第一种方式要使用自执行的方式。(我试过不使用也是可以正常调用)
2:平时项目大家会选择使用哪种方式? 为啥?



------解决方案--------------------
第一个是闭包,主要看tests()函数的功能了。
一般的js代码少的网页用哪个都行。
------解决方案--------------------
第一种, 标准的。
------解决方案--------------------
安全就用第一种。。我觉得。。
------解决方案--------------------
问题:
1:为啥第一种方式要使用自执行的方式。(我试过不使用也是可以正常调用)
为啥使用自动的方式,比如上一个操作完,要马上执行下一个操作,你就可以用自动 ,不用自动你手动调用当然也可以。

2:平时项目大家会选择使用哪种方式? 为啥?
用哪种都要吧吧,其实这二种都差不多,没必要执着的去想为什么了,第一个是闭包的方式,安全性是要强点的。
------解决方案--------------------
1的写法主要是为了变量和函数(本质上也是变量)作用范围独立,这样你写好一个你自己的一功能,就可以这样封装为外部的js文件,在任何地方引用,而不用担心你自己的函数和“全局”变量会与引用页冲突。
比如
JScript code

    var a = "out";
    function tests() {
        alert(a);
    };
    
    (function() {
        window.r_soft = new Object();
        var a = "inner";
        function tests(s) {
            alert(s+a);
        }
        window.r_soft.tests = tests;
    })();

------解决方案--------------------
看完这个应该都懂了
------解决方案--------------------
自动执行匿名函数,好处是避免命名冲突

你的2段代码都是只 暴露了一个全局变量,这样的代码
为什么不简单点写呢?非要加个匿名函数呢
------解决方案--------------------
我感觉应用第二种,用闭包会浪费内存,用其他方式能实现最好不用闭包
------解决方案--------------------
个人认为,匿名函数立即运行,势必会影响性能,使用它只要是避免与全局变量冲突。

楼主可以试试
var namespace = {
a:1,
b:2,
fn: function(){
alert(this.a);
}
}