本文實例講述了JavaScript引用類型Function。分享給大家供大家參考,具體如下:
Function類型
函數是對象,函數名是指針:每個函數都是Function類型的實例。由于函數是對象,因此函數名是一個指向函數對象的指針,不會與某個函數綁定,一個函數可能會有多個名字。
function getSum(a, b) { return a + b;}alert(getSum(2, 3));//5var copy = getSum;alert(copy(2, 3));//5getSum = null;alert(copy(2, 3));//5定義函數的方式有三種:函數聲明、函數表達式、Function構造函數。
Function構造函數接收任意數量的參數,前面的參數枚舉了函數的參數,最后一個參數是函數體。一般不推薦使用Function構造函數定義函數。
var getSum = new Function("a", "b", "return a + b";JavaScript沒有函數重載的概念,若聲明了兩個同名函數,則后面的函數會覆蓋前面的函數。
由于函數名本身是變量,因此函數也可以作為值來使用,不僅可以傳遞一個函數作為參數,還可以將函數作為返回值。
function callFunction(func, arguments) { return func(arguments);}function sayHello(name) { return "Hello, " + name;}var result = callFunction(sayHello, "Alice");alert(result);//Hello, Alice①、函數聲明
function 函數名稱(參數|可選) { 函數體 }
例:
function func1(){// 聲明,程序的一部分 function func() {// 聲明,函數體的一部分 ...//函數體 }}②、函數表達式
function 函數名稱|可選(參數|可選) { 函數體 }
例1:
var fun = function func() {};//表達式,賦值表達式的一部分例2:
new function func(){};//表達式,new表達式例3:
(function func(){});//表達式,包含在分組操作符——括號()內,括號()內只能包含表達式例4:
[function func() {}];//表達式,數組初始化器內只能是表達式例5:
1, function func() {};//表達式,逗號只能操作表達式③、函數構造器
函數構造器創建的函數的[[Scope]]屬性僅包含全局對象。
<script> var a = 1; func1(); function func1() { var a = 2; var b = 3; var func2 = new Function("alert(a); alert(b);"); func2();//1,b is not defined }</script>函數構造器創建的函數func2可以從全局對象中取得變量a,但全局對象中沒有b,因此報錯:b未定義。
函數聲明和函數表達式的區別
1)函數聲明在進入上下文階段創建,在代碼執行階段就已經可用了,函數表達式則是在代碼執行階段才創建,所以函數聲明可以提升,但函數表達式則不能。
新聞熱點
疑難解答
圖片精選