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函数对象
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函数对象
var o = {};
o.store = 123
这样能理解把 设置o 的成员store 为一个function然后
var o = {};
o.store = (function(){ return 123; })();
这样效果和上面是一样的
(xxx) 第一个()的意思 '(xxx)'执行和返回表达式 xxx (xxx)() 接上面 计算就变成 xxx() 这里的()变成了 函数运算符号 表示执行 xxx (如果xxx最终是一个function的话)
你把分成两部分看,先看红色里面的,是不是一个函数?是吧,红色括号是改变运算符号优先级的,然后再看绿色的括号,这个括号是函数调用,就是调用前面那个匿名函数,连起来就是一个立即执行的匿名函数。store是bds.se的属性,store属性的值就是那个立即执行的匿名函数的返回值,由于立即执行的匿名函数没有返回值,所以bds.se.store=undefined;
那么(function(){})()是什么?这是个立即执行的匿名函数(function(){})()
等于
var aaa = function(){};
(aaa)()
等于
var aaa = function(){};
aaa()
等于
function aaa(){};
aaa()
(2)蓝色部分是一个() 在JS里面指的是组的意思, 这里面只能接表达式
比如function() 在这里就是, 不能写 (var i=0;) 类似这样的语句,
(3)红色部分的() 如果是在涵数后面这样写的话,是自执行的意思,大部分是用来直接调用匿 名涵数的,类似于function a (){ //做点什么吧)} 调用的时候是a() ,方法的调用要加(),
上面加()也就是调用的意思, 也可以理解成自执行涵数。
我也是个人理解也不知道是否正确,可以参考下。
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赋值