1. Pengisytiharan fungsi
function sum1(n1,n2){ return n1+n2; };
2 Ungkapan fungsi, juga dipanggil fungsi literal
var sum2=function(n1,n2){ return n1+n2; };
Kedua-duanya Perbezaannya: penghurai akan membaca pengisytiharan fungsi terlebih dahulu dan menjadikannya boleh diakses sebelum melaksanakan sebarang kod manakala ungkapan fungsi mesti menunggu sehingga penghurai mencapai baris kod di mana ia terletak sebelum ia benar-benar ditafsirkan dan dilaksanakan.
Tegasnya, fungsi laksana sendiri juga dipanggil ungkapan fungsi Ia digunakan terutamanya untuk mencipta skop baharu daripadanya Ia wujud sebagai fungsi tanpa nama dan dilaksanakan secara automatik serta-merta.
(function(n1,n2){ console.log (n1+n2) })(1,3);//4
Beberapa fungsi laksana sendiri yang lain:
//可用来传参 (function(x,y){ console.log(x+y); })(2,3); //带返回值 var sum=(function(x,y){ return x+y; })(2,3); console.log(sum); ~function(){ var name='~' console.log(name); }(); !function(){ var name='!' console.log(name); }(); ;(function(){ var name=';' console.log(name); })(); -function(){ var name='-' console.log(name); }(); //逗号运算符 1,function(){ var name=','; console.log(name); }(); //异或 1^function(){ var name='^'; console.log(name); }(); //比较运算符 1>function(){ var name='>'; console.log(name); }(); ~+-!(function(){ var name='~+-!'; console.log(name); })(); ~!(function(){ var name='~!'; console.log(name); })(); (function(){ var name='call'; console.log(name); }).call(); (function(){ var name='apply'; console.log(name); }).apply();
3. Kaedah pembinaan fungsi, parameter mesti dipetik
var sum3=new Function('n1','n2','return n1+n2'); console.log(sum3(2,3));//5
Secara teknikal, ini ialah ungkapan fungsi. Secara amnya tidak disyorkan untuk mentakrifkan fungsi dengan cara ini, kerana sintaks ini akan menyebabkan kod dihuraikan dua kali (kali pertama ialah menghuraikan kod ECMAScript biasa, dan kali kedua ialah menghuraikan rentetan yang dihantar ke pembina), sekali gus menjejaskan prestasi.
var name='haoxl'; function fun(){ var name='lili'; return new Function('return name');//不能获取局部变量 } console.log(fun()());//haoxl
Pembina Function() akan menghuraikan badan fungsi dan mencipta objek fungsi baharu setiap kali ia dilaksanakan, jadi apabila memanggil Function dalam gelung atau fungsi yang kerap dilaksanakan () kecekapan pembina adalah sangat rendah. Literal fungsi tidak disusun semula setiap kali ia ditemui Apabila mencipta fungsi menggunakan pembina Function(), ia tidak mengikut skop biasa Ia sentiasa melaksanakannya sebagai fungsi peringkat atas.
【Tutorial berkaitan yang disyorkan】
1 Tutorial video JavaScript
2 Manual dalam talian JavaScript
3 tutorial bootstrap