一:實際上就和我們最為平常的方法是一樣的。
function fname(test){ alert(""+test); }
二:通過Function的函數的構造器進行函數對象的定義。
var fname = new Function("test", "alert(''+test);"); 第一個參數實際上是表示要傳入函數中的參數,二第二個參數表示的是當前的函數要執行的過程。兩個參數實際上都是string類型的。但是又上可以看出實際上當前的內容是十分的繁雜。
三:通過變量只帶一塊function關鍵字定義的方法來進行定義。
var fname = function(test){alert(""+test);}
上面的三種方法雖然最后都是聲明定義了一個函數,但是也是有區別的。第一種方法實際上是為函數命名為fname,而二三種方法使用起來實際上是把一個匿名函數賦值給一個變量。使用第二種方法來定義函數的時候,實際上就是調用構造函數並在每次解析的時候都會重新讀取並創建一新的函數對象,由此可見當在循環體中調用這樣的函數的時候會是十分的低效的,還有一點就是,當我們使用其創建一個函數對象的時候,其並不遵循典型的作用域,而是一直作為頂級函數來執行的。意思就是,當在函數內部調用它的時候,其實他並不會用函數內部定義的變量。而是只能使用全局變量。
原文地址:https://www.cnblogs.com/pingchuanxin/p/5722139.html