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

问一个js语法的问题。
在看dojo源代码时:如下代码没有看明白:
dojo.render   =   (function(){
//TODOC:   HOW   TO   DOC   THIS?
//   summary:   Details   rendering   support,   OS   and   browser   of   the   current   environment.
//   TODOC:   is   this   something   many   folks   will   interact   with?     If   so,   we   should   doc   the   structure   created...
function   vscaffold(prefs,   names){
var   tmp   =   {
capable:   false,
support:   {
builtin:   false,
plugin:   false
},
prefixes:   prefs
};
for(var   i=0;   i <names.length;   i++){
tmp[names[i]]   =   false;
}
return   tmp;
}

return   {
name:   " ",
ver:   dojo.version,
os:   {   win:   false,   linux:   false,   osx:   false   },
html:   vscaffold([ "html "],   [ "ie ",   "opera ",   "khtml ",   "safari ",   "moz "]),
svg:   vscaffold([ "svg "],   [ "corel ",   "adobe ",   "batik "]),
vml:   vscaffold([ "vml "],   [ "ie "]),
swf:   vscaffold([ "Swf ",   "Flash ",   "Mm "],   [ "mm "]),
swt:   vscaffold([ "Swt "],   [ "ibm "])
};
})();

感觉上dojo.render   应该是个函数,于是摸拟写了一下:
var   a=(function(){alert( 'ww ')})();
a();
确实能输出ww
但如果穿个参数就不行了
var   a=(function(v1){alert(v1)})();
        a( 's ');
会提示undefined
请问这种用法的真正意义是什么??谢谢!!!!

------解决方案--------------------
()是返回值的意思。
(function () {})
返回了这个函数。。
所以
(function () {})();
就是执行返回的这个函数。。
var a=(function(){alert( 'ww ')})();
a();
的确是输出了ww
然后a();这个会报错。。
------解决方案--------------------
如果要传参数的话。
var a=(function(v1){alert(v1)})( 'wc ');
------解决方案--------------------
这种写法不好,我劝你还是用比较易懂好看的东西,因为js是一种规则比较宽松的语言,所以有时候一些写法也可以出现你要的结果,但是不提倡.我们还是应该安安份份的来写自己的代码吧!
这样不至于第一天写了,第二天连自己都看不懂了,呵呵!