您好,登錄后才能下訂單哦!
本文實例講述了JavaScript引用類型Function。分享給大家供大家參考,具體如下:
Function類型
函數是對象,函數名是指針:每個函數都是Function類型的實例。由于函數是對象,因此函數名是一個指向函數對象的指針,不會與某個函數綁定,一個函數可能會有多個名字。
function getSum(a, b) { return a + b; } alert(getSum(2, 3));//5 var copy = getSum; alert(copy(2, 3));//5 getSum = 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)函數聲明在進入上下文階段創建,在代碼執行階段就已經可用了,函數表達式則是在代碼執行階段才創建,所以函數聲明可以提升,但函數表達式則不能。
函數聲明提升:
func();//Function declaration function func(){ alert("Function declaration"); }
函數表達式不能提升:
func();//報錯:func is not a function var func = function (){ alert("Function expression"); }
2)函數聲明影響變量對象VO,也就是存儲在上下文的VO中的變量對象,函數表達式不影響變量對象VO,不存在于變量對象中,這意味著既不可能通過名稱在函數聲明之前調用它,也不可能在聲明之后調用它。但是,函數表達式在遞歸調用中可以通過名稱調用自身。
例1:
alert(func); //報錯:func is not a function。定義之前不可用,因為它在代碼執行階段創建 (function func() {}); alert(func); //報錯:func is not a function。定義之后也不可用,因為它不在變量對象VO中
例2:
(function func(param) { if (param) { return; } func(true);//func可用,遞歸調用可以通過名稱調用自身 })(); func(); // func is not a function,外部不可用
3)函數聲明只能出現在程序或函數體內,不能出現在表達式或塊({ … })中,如if、while或for語句中。因為JavaScript無塊級作用域,只有函數和全局作用域。 函數表達式出現在表達式的位置。
函數聲明:有的瀏覽器會返回if,而有的瀏覽器會返回else。
if (true) { function func() { alert('if'); } } else { function func() { alert('else'); } } func();
函數表達式:所有瀏覽器都返回if。
var func; if (true) { func = function() { alert('if'); }; } else { func = function() { alert('else'); }; } func();
更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《javascript面向對象入門教程》、《JavaScript常用函數技巧匯總》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結》
希望本文所述對大家JavaScript程序設計有所幫助。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。