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);