作者jjjkkkooo (接科噎欧)
看板Ajax
标题Re: [问题] js的function
时间Tue Dec 20 13:04:30 2011
※ 引述《jjjkkkooo (接科噎欧)》之铭言:
: 大家好,在下正在学习js与jQuery,是新手,不过有写过
: flash的AS与php,js的感觉很像flash以前的AS2,还算蛮好上手的
: 但一直有个东西不懂为什麽要这样写,像jQuery原始码里
: 以及其它范例常出现下面的语法:
: (function(){
: })();
: 一般function是这样写
: function(){
: }
: 外层又包了括弧实在不懂这到底是什麽函义,是否能指点一二?感激不尽!
做了点功课,读了O'Reilly的书有点头绪,嚐试来自问自答一下
还请板上先进指正!
关於下列语法:
(function(){
})();
先从一般的function分析起,是function必然可以被执行
若是非匿名则可以这样呼叫:
function func(){
}
func();
而匿名的function则没有function name,如下:
function(){
}
要如何执行此function?那就是将宣告的这function包起来
(function(){
}
)
就可以把上面语法当成是个拿得到的function而不只是宣告出来的function
把上面那一包当成是func,因此要执行func就是执行此匿名函式,因此
func();即
(function(){
}
)();
也就是板友推文提到立即执行此function
==============================================================
现在在下又衍生一些问题...就是即然是匿名的function
外部又是怎麽拿到像jQuery里定义的变数像$, jQuery?
另外jQuery原始码里的
(function( window, undefined ) {
})();
window与undefined这二个参数倒底是指真正的window物件与undefined
或只是function里头的变数名称而已?
还请各位先进解惑,感激不尽!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.41.163.199
1F:→ CaptainH:是变数名称而已, 变数要自己传进去 12/20 13:07
2F:→ CaptainH:像这样: (function($){ ... })(jQuery); 12/20 13:08
3F:推 mrbigmouth:你前篇也写了...下面的()其实是输入(window) 12/20 13:19
4F:→ mrbigmouth:所以让里面用的window等於外面用的window 12/20 13:19
5F:→ mrbigmouth:undefined则不予传值,确保undefined真的是undefined 12/20 13:20
6F:→ mrbigmouth:这样只要里面宣告window.$=? 外面的window.$也等於? 12/20 13:21
7F:推 s25g5d4:第五行写错了 括号位置不对 12/20 18:56
已修正,感谢指教!!
8F:推 s25g5d4:另外 js找变数时会从最接近的开始找 所以他先找到你传入 12/20 19:00
9F:→ s25g5d4:的变数window 而你在变数window里面存的是window物件 12/20 19:00
※ 编辑: jjjkkkooo 来自: 114.41.163.199 (12/20 19:04)