(function(){})()
找不到原帖地址了,简单修改了下。
-----------------------------------------------
(function(){})()定义了一个匿名函数,相当于先定义 function xx(){},然后调用 xx();
()是最高优先级的,所以先执行function(){},相当于xx=function(){},接着就是调用xx()了。
给个例子:
function f1(a)
{
alert(a);
}
function f2(a)
{
return function(){ alert(a); }
}
var x=f2 相当于把函数传递给了f2,然后要执行这个函数,就必须加(),也就是x(),也就是f2()。
还是(function f2(a){
return function(){
alert(a);
})();
另外还有一个问题 就是命名空间的问题
YY = YY||{}; //--声明一个叫YY的命名空间(定义一个全局的变量)
(function() {
YY.Lang=function() {
//--声明一个叫YY.Lang的命名空间(通过全局变量的增加属性的方式把闭包里的对象传到全局变量中,实现代码封装的效果)
isUndefined: function(o) {
return typeof o === 'undefined';
},
isString: function(o) {
return typeof o === 'string';
}
};
})();
---调用方法
alert(YY.Lang.isString('test me'));
这时候就有人不明了,为什么要加(function() { 和 })(); 最外面的这两行,有什么用呢?
疑问:注释掉这两行有什么不一样的呢?不就是声明吗,为什么要用()()执行一下啊?
答:
(function(){})()意思是立即执行前一个括号里的 function,相当于是一个匿名函数;由于里面代码的执行,定义了 YY.Lang这个对象,所以可以执行 alert(YY.Lang.isString('test me'));调用 isString方法。
但是,如果按照你写的function aa(){..}; 只是定义了一个叫 aa的函数,但是并没有执行。
alert(YY.Lang.isString('test me'));//执行的时候会报找不到 isString的方法。
这么写有什么好处?
(function{})()的写法有个好处,就是能很好的利用 javascript的变量的可见范围为执行脚本时节省空间。例如以下写法 1和写法2 达到的目的是一样的,但是写法 1由于a 变量的可见范围只是在匿名函数体内,所以 a在执行完这个匿名函数后就释放空间了。但是写法 2会一直存在该页面中。
写法1:
(function(){vara=2; alert(a); })();
写法2:
vara=2; alert(a);
浙公网安备 33010602011771号