本文實(shí)例講述了javascript function(函數(shù)類(lèi)型)使用與注意事項(xiàng)。分享給大家供大家參考,具體如下:
在ECMAScript中,F(xiàn)unction(函數(shù))類(lèi)型實(shí)際上是對(duì)象。每個(gè)函數(shù)都是Function類(lèi)型的實(shí)例,而且都與其他引用類(lèi)型一樣具有屬性和方法。由于函數(shù)是對(duì)象,因此函數(shù)名實(shí)際上也是一個(gè)指向函數(shù)對(duì)象的指針。
學(xué)習(xí)要點(diǎn):
1.函數(shù)的聲明方式
2.作為值的函數(shù)
3.函數(shù)的內(nèi)部屬性
4.函數(shù)屬性和方法
一.函數(shù)的聲明方式
1.普通的函數(shù)聲明
function box(num1, num2) { return num1+ num2;}2.使用變量初始化函數(shù)
var box= function(num1, num2) { return num1 + num2;};3.使用Function構(gòu)造函數(shù)
var box= new Function('num1', 'num2' ,'return num1 + num2');PS:第三種方式我們不推薦,因?yàn)檫@種語(yǔ)法會(huì)導(dǎo)致解析兩次代碼(第一次解析常規(guī)ECMAScript代碼,第二次是解析傳入構(gòu)造函數(shù)中的字符串),從而影響性能。但我們可以通過(guò)這種語(yǔ)法來(lái)理解"函數(shù)是對(duì)象,函數(shù)名是指針"的概念。
二.作為值的函數(shù)
ECMAScript中的函數(shù)名本身就是變量,所以函數(shù)也可以作為值來(lái)使用。也就是說(shuō),不僅可以像傳遞參數(shù)一樣把一個(gè)函數(shù)傳遞給另一個(gè)函數(shù),而且可以將一個(gè)函數(shù)作為另一個(gè)函數(shù)的結(jié)果返回。
function box(sumFunction, num) { return sumFunction(num); //someFunction}function sum(num) { return num + 10;}var result = box(sum, 10); //傳遞函數(shù)到另一個(gè)函數(shù)里三.函數(shù)內(nèi)部屬性
在函數(shù)內(nèi)部,有兩個(gè)特殊的對(duì)象:arguments和this。arguments是一個(gè)類(lèi)數(shù)組對(duì)象,包含著傳入函數(shù)中的所有參數(shù),主要用途是保存函數(shù)參數(shù)。但這個(gè)對(duì)象還有一個(gè)名叫callee的屬性,該屬性是一個(gè)指針,指向擁有這個(gè)arguments對(duì)象的函數(shù)。
function box(num) { if (num <= 1) { return 1; } else { return num * box(num-1); //一個(gè)簡(jiǎn)單的的遞歸 }}對(duì)于階乘函數(shù)一般要用到遞歸算法,所以函數(shù)內(nèi)部一定會(huì)調(diào)用自身;如果函數(shù)名不改變是沒(méi)有問(wèn)題的,但一旦改變函數(shù)名,內(nèi)部的自身調(diào)用需要逐一修改。為了解決這個(gè)問(wèn)題,我們可以使用arguments.callee來(lái)代替。
function box(num) { if (num <= 1) { return 1; } else { return num * arguments.callee(num-1);//使用callee來(lái)執(zhí)行自身 }}函數(shù)內(nèi)部另一個(gè)特殊對(duì)象是this,其行為與Java和C#中的this大致相似。換句話說(shuō),this引用的是函數(shù)據(jù)以執(zhí)行操作的對(duì)象,或者說(shuō)函數(shù)調(diào)用語(yǔ)句所處的那個(gè)作用域。PS:當(dāng)在全局作用域中調(diào)用函數(shù)時(shí),this對(duì)象引用的就是window。
//便于理解的改寫(xiě)例子window.color = '紅色的'; //全局的,或者var color = '紅色的';也行alert(this.color); //打印全局的colorvar box = { color : '藍(lán)色的', //局部的color sayColor : function () { alert(this.color); //此時(shí)的this只能box里的color }};box.sayColor(); //打印局部的coloralert(this.color); //還是全局的
新聞熱點(diǎn)
疑難解答
圖片精選