2016
Apr
02
JavaScript 中使用 function 的方式為在 function 名稱後面加上大小括號: funcName() , 但我們也可以改變成另外一種寫法,就能夠省略括號。
一般來說當你想要使用某一個 JavaScript function 時,你必須先定義一個 function 如:
Example
- function jsMain() {
- var ret;
- ...xxx
- return ret;
- }
接著我們會呼叫它 var str = jsMain()
,這是大家平常會寫的 code 。
Immediately invoked function expression
但是你有沒有曾經看過下面這種寫法:
Example
- (function () {
- console.log("Executed!");
- })();
這個 function 先被一組括號括起來,形成一個獨立的變數空間 (function scoping),然後再用 () 來執行,這個寫法也被稱為 Immediately invoked function expression ,這種 function 的執行方式看起來好像括號不是直接寫在 function 上,但也是需要括號的 ~~
new
我們可以用 new 來 initialize 一個 Object ,也可以非正規的偷用來執行 function ,但是只能在你不須要傳入任何參數的時候,
Example
- function main() {
- console.log("Executed!");
- }
- new main;
toString
toString 大家應該會比較熟悉一點,在 JavaScript 中,當程式需要將物件轉換成 string 的時候,就會對該物件執行 toString method 。
toString example
- function main() {
- }
- main.toString = function () {
- console.log("Executed!");
- return "";
- }
- var ret = "a" + main;
valueOf
valueOf 是指將回傳物件的原生數值(Primitive Value), JavaScript 中每一種變數都是一個物件,例如一個變數 = 20,它屬於 Number 這個物件,而他的 Primitive Value 是 20
valueOf example
- function main() {
- };
- main.valueOf = function () {
- console.log("Executed!");
- return ""
- };
- var ret = 0 + main;
setTimeout
最後一種方式是使用 setTimeout ,這個寫法也是可以不需要括號的,請看範例
Example
- function main() {
- console.log("Executed!");
- };
- setTimeout(main, 0);