函數的定義方式函數
函數聲明:必須有名字,會函數提高,在預解析階段就已經建立,聲明先後均可以調用code
//函數聲明 //定義函數名 function fn(){ console.log(123); }
函數表達式:一種變量賦值,函表達式能夠沒有名字(匿名函數),沒有函數提高。對象
//將函數賦值給一個變量,能夠是匿名函數 var fn = function(){ console.log(123); };
因爲函數聲明提高,函數聲明定義的函數,其函數名能夠在函數聲明以前調用,而函數表達式定義的函數不能,它進行的是一個變量賦值,本質會進行變量聲明提高,若是寫在前面的話,只是定義了一個變量,而沒有賦值,其內部是undefined,沒法執行函數,就會報錯。blog
new Function圖片
函數自己也是一種對象,能夠調用屬性和方法ip
//函數聲明方式 //有參數 function fun(a,b){ var a = 1; console.log(a+b); } function(2,3); //經過構造函數方法定義函數 var fn = new Function('var a = "1";console.log(a)'); fn(); //添加參數 var fn2 = new Function('a','b','var a = "1";console.log(a+b)'); fn2(2,4);
這種方式其實至關於new Function的括號裏穿的是一堆字符串,解析慢,效率低,易出錯。字符串
console.dir(fn2);//new Function()是函數也是一種對象,有本身的屬性和方法
new Function()是函數也是一種對象,有本身的屬性和方法io