js中動態函式的一些用法嘗試
在js中,經常會使用到函式,普通函式雖然很方便,但是,形式略顯複雜,特別是程式碼量大的時候,這時,我們可以使用動態函式,動態函式形式比較簡潔,並且比普通函式表示式更靈活,其結構如下:
var fun_name=new Function(x1,x2,x3,...,fun_body)
這裡需要注意的是,....表示的是省略,可以作為虛擬碼來看,並且,Function不能寫成function,不然會報錯,我們可以對比一下:
var fun1 = new Function("num1","num2","return num1+num2"); console.log(fun1(12,2))
執行結果:14
結果正確,我們換成function:
var fun1 = new function("num1","num2","return num1+num2");
console.log(fun1(12,2))
執行結果:
Uncaught SyntaxError: Unexpected string
果然報錯了,這裡就需要了解到function 和Function的區別,這篇部落格(https://blog.csdn.net/kinseygeek/article/details/68280828)詳細地查了英文文件,給了我們解答。function是用於宣告函式時用的,而Function是 constructor,裡面需要傳的是string,剛才的嘗試中,顯然我們並不是宣告函式。而且我們傳入的引數必須以字串的形式進行,我們嘗試一下:
var fun1 = new Function(num1,num2,return num1+num2);
console.log(fun1(12,2))
執行結果:
Uncaught SyntaxError: Unexpected token return
因此我們在使用Function的時候,必須傳入string的形式。
關於動態函式中的fun_body,到底什麼形式的才算fun_body呢?此表示式只要參與運算就行嗎?答案當然不是,因為函式必須要有返回值,沒有返回值的運算是沒有作用的,我們可以看下:
var fun1 = new Function("num1","num2","num1+num2"); console.log(fun1(12,2))
我們的fun_body裡使用了運算子“+”,實際上並沒有什麼卵用,得不到結果,會出現:
undefined
我大膽地進行猜測,這是因為沒有識別到fun_body嗎。我們嘗試一下:
var fun1 = new Function("num1","num2","num1+num2");
執行結果為空白,沒有報錯。
說明我們的猜測是對的。這問題等價於“num1+num2"也作為引數了,沒有fun_body。說明fun_body是可以省略但是這樣做沒有實際價值。