(function(){})()
相当于先定义 function xx(){},后调用 xx();
()是最高优先级的,所以先执行function(){},
这个定义了一个匿名函数,等于xx=function(){}
接着就是调用xx()了;
给个例子
JScript code
1 | functionf1(a) |
这里的var x=f2 就等于把函数传递给了f2,然后要执行这个函数,就必须加() 也就是x();
也就是f2()
还是
1 | (function f2(a){ |
另外还有一个问题 就是命名空间的问题
YY = YY||{};—声明一个叫YY的命名空间(定义一个全局的变量)
1 | (function() { |
—调用方法
1 | alert(YY.Lang.isString('test me')); |
这时候就有人不明了,楼上为什么要加(function() { 和)(); 最外面的这两行,有什么用啊?
JScript code
1 | YY=YY||{}; //---声明一个叫YY的命名空间(定义一个全局的变量) |
疑问在这:?????? 注释掉这两行有什么不一样的呢?不就是申明吗,为什么要用()()执行一下啊?
答:
(function(){})()意思是立即执行前一个括号里的function,相当于是一个匿名函数;由于里面的代码的执行,定义了YY.Lang这个对象,所以可以执行alert(YY.Lang.isString(‘test me’));调用isString方法。
但是,如果按照你写的
functionaa(){..};//只是定义了一个叫aa的函数,但是并没有执行
alert(YY.Lang.isString(‘test me’));//执行的时候会报找不到isString的方法。
这么写有什么好处??????????????
(function{})()的写法有个好处,就是能很好的利用javascript的变量的可见范围为执行脚本时节省空间。例如以下写法1和写法2达到的目的是一样的,但是写法1的由于a变量的可见范围只是在匿名函数体内,所以a在执行完这个匿名函数后就释放空间了。但是写法2会一直存在该页面中。
写法1:
JScript code
1 | (function(){vara=2; alert(a); })(); |
写法2:
JScript code
1 | vara=2; alert(a); |