作者TonyQ (沉默是金。)
看板Ajax
标题Re: [问题] 必须要有;
时间Thu Sep 8 02:56:47 2011
※ 引述《hirabbitt (兔子)》之铭言:
: 我照网路抄FB语法
: }());
: </script>
: 只有这一段的话没有问题
: 但是只要下面再加script
: IE就会出现 "必须要有;"
IE几?
加了什麽script 你写完之後 程式码长怎样?
: 老实说我完全看不懂这一段FB的写法
你看不懂哪里,不懂什麽?orz
我觉得很清楚啊,他就载入一个外部的 script file ,
然後宣告了一个 callback 到 window上等着被这个script 里面调用。
你总不会是想要我们一行一行解释给你听吧 囧rz
: 尤其是黄色部份和红色部分
: 有人可以指点一二吗?
这可以自己写个简单的测试案例测试看看,
测了一下,IE8 、 chrome正常。
http://jsfiddle.net/spCCx/1/
--
I am a person, and I am always thinking .
Thinking in love , Thinking in life ,
Thinking in why , Thinking in worth.
I can't believe any of what ,
I am just thinking then thinking ,
but worst of all , most of mine is thinking not actioning...
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 198.203.175.175
※ 编辑: TonyQ 来自: 198.203.175.175 (09/08 02:58)
※ 编辑: TonyQ 来自: 198.203.175.175 (09/08 02:58)
1F:推 hirabbitt:原来是我少见多怪 最外面的()是指这个function要执行? 09/08 12:33
2F:→ hirabbitt:那後面合在一起的() 是做什麽用的@@? 09/08 12:33
3F:→ TonyQ:function(){}() <<这个()是要执行。 09/08 13:46
4F:→ TonyQ:最外面的 () 就只是包起来当作一个statement而已 没别的用意 09/08 13:46
5F:→ TonyQ:不过常见还是 (function(){})() 就是;其中前面的()也一样只 09/08 13:47
6F:→ TonyQ:是包裹function 当成一个statement 而已。 09/08 13:47
7F:→ tyf99:所以 function(){}(); == function a(){}; a(); 是吗? 09/08 21:05
8F:→ sk1765:function(){}(); 是不能执行的 因为他会视成是 09/08 23:37
9F:→ sk1765:function statement 一定要写成 (function(){})(); 09/08 23:38
10F:→ sk1765:(function() {}) 加了括号 是一个function expression 09/08 23:39
11F:→ s25g5d4:其实()是个可爱又可恶的东西... 09/08 23:40
12F:→ sk1765:才能执行 所以後面才能加()执行 如果整个包起来 09/08 23:40
13F:→ s25g5d4:像是字串 包上了()可以直接调用.match() .split()等函数 09/08 23:41
14F:→ s25g5d4:例如("s25g5d4").split("5"); //return ['s2','g','d4'] 09/08 23:42
15F:→ sk1765:(function (){}()); 前面的function(){}是在括号里的运算式 09/08 23:42
16F:→ sk1765:所以不会被视为 function statement 09/08 23:43
17F:→ sk1765:可以了解一下function statement 和 function expression 09/08 23:46
18F:→ sk1765:的不同 09/08 23:46
19F:推 s25g5d4:我的想法是 js编译器读到function 就会以为这是要建立一 09/08 23:47
20F:→ s25g5d4:个函数 所以後面的()会令他错乱 09/08 23:48
21F:→ s25g5d4:然而先用一个()包起来 他会先运算()里的东西 09/08 23:49
22F:→ s25g5d4:运算完的结果是返回一个函数 所以可以直接套上()执行 09/08 23:49
23F:→ sk1765:(function() {}) ();是因为括号优先运算 算出来一个 09/08 23:57
24F:→ sk1765:function object 後面再加()继续运算成执行 09/08 23:59
25F:→ sk1765:(function() {}()) 则只是在避免成为function statement 09/09 00:00
26F:→ sk1765:在括号内 照 function () {} 算出物件然後再算() 09/09 00:01
27F:→ sk1765:(function (){})();的目的只是在制造一个执行一次的scope 09/09 00:06
28F:→ TonyQ:yes , sk1765 解释得很清楚 09/09 01:52
29F:推 hirabbitt:哇 感谢 学到了以前不会的东西 09/09 12:49