var bds = {
      se: {},//se.store
      comm: {
        ishome: 1,
        sid: "1434_2448_1945_1788_2249_2252",
        user: "",
        username: "",
        sugHost: "http://suggestion.baidu.com/su",
        personalData: "",
        loginAction: []
      }
    }
bds.se.store = (function() {})();bds是个对象是吧,se是bds的属性,我想问这里store到底是个什么哇?是se的属性?还是se的一个方法?(function() {})()这一段里面的两个括号分别是什么意思啊~~~
JavaScript函数对象

解决方案 »

  1.   

    比如
    var o = {};
    o.store = 123
    这样能理解把  设置o 的成员store 为一个function然后 
    var o = {};
    o.store = (function(){ return 123; })();
    这样效果和上面是一样的
    (xxx)    第一个()的意思    '(xxx)'执行和返回表达式 xxx   (xxx)()   接上面  计算就变成  xxx()  这里的()变成了  函数运算符号 表示执行 xxx (如果xxx最终是一个function的话)
      

  2.   

    (function() {}()
    你把分成两部分看,先看红色里面的,是不是一个函数?是吧,红色括号是改变运算符号优先级的,然后再看绿色的括号,这个括号是函数调用,就是调用前面那个匿名函数,连起来就是一个立即执行的匿名函数。store是bds.se的属性,store属性的值就是那个立即执行的匿名函数的返回值,由于立即执行的匿名函数没有返回值,所以bds.se.store=undefined;
      

  3.   

    首先store是se的属性还是se的一个方法取决于(function(){})()返回值是什么。
    那么(function(){})()是什么?这是个立即执行的匿名函数(function(){})()
    等于
    var aaa = function(){};
    (aaa)()
    等于
    var aaa = function(){};
    aaa()
    等于
    function aaa(){};
    aaa()
      

  4.   

    (function() {}()(1)绿色部分是一个涵数, 
    (2)蓝色部分是一个() 在JS里面指的是组的意思, 这里面只能接表达式
    比如function() 在这里就是, 不能写 (var i=0;) 类似这样的语句,
     (3)红色部分的() 如果是在涵数后面这样写的话,是自执行的意思,大部分是用来直接调用匿 名涵数的,类似于function a (){ //做点什么吧)}  调用的时候是a() ,方法的调用要加(),
    上面加()也就是调用的意思, 也可以理解成自执行涵数。
    我也是个人理解也不知道是否正确,可以参考下。
      

  5.   

    function noName(){ // 声明一个方法, 相当于前面一个括号:(function() {}),只不过这个方法没有取名字,也就是所谓的匿名方法。
        return 1;
    }/*
     * 调用刚声明的方法。
     * 因为我这个取了名字,叫noName,所以我可以直接使用noName代替方法体,然后在noName后面加括号调用该方法。
     * 而你前面一个括号声明的方法没有取名字,也就是所谓的匿名方法。所以直接在方法体后面加括号调用
     */
    var value = noName(); // 把调用noName方法的返回值赋值给value变量/*
     * value 的值取决于noName方法的返回值
     * 它可能是方法、数字、字符串、null值等任何类型
     */
    bds.se.store = value; // 为bds对象的se属性(se也是一个Object对象)的store赋值我想问这里store到底是个什么哇?是se的属性?还是se的一个方法?可以改下上面的代码的noName方法体:
    function noName(type) {
        switch (type) {
            case 1:
                return 1;
            case 2:
                return "1";
            case 3:
                return function () { alert("1"); }
            case 4:
                return null;
            case 5:
                return undefined;
            case 6:
                return true;
            default:
                return NaN;
        }
    }var value = noName(3); // 这里如果你传的参数是1,value变量就为1,传的参数是3,value变量就为一个方法咯。
    bds.se.store = value; // 为bds对象的se属性(se也是一个Object对象)的store赋值