问一个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是一种规则比较宽松的语言,所以有时候一些写法也可以出现你要的结果,但是不提倡.我们还是应该安安份份的来写自己的代码吧!
这样不至于第一天写了,第二天连自己都看不懂了,呵呵!