欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript中Function詳解

 更新時(shí)間:2015年02月27日 09:41:13   投稿:hebedich  
函數(shù)是由關(guān)鍵字function、函數(shù)名加一組參數(shù)及置于大括號(hào)中需要執(zhí)行的一段語(yǔ)義定義的。今天我們就來(lái)詳細(xì)講解一下JavaScript中的Function。

關(guān)鍵字function用來(lái)定義函數(shù)。

復(fù)制代碼 代碼如下:

//函數(shù)聲明式定義:
function funcname([arg1[,args[...,argn]]]){
 statements
}
//函數(shù)表達(dá)式定義:
var funcname = function ([arg1[,args[...,argn]]]){
 statements
};

注意,function語(yǔ)句里的花括號(hào)是必需的,即使函數(shù)體只包含一條語(yǔ)句。

在JavaScript中,函數(shù)是Function類的具體實(shí)例。而且都與其它引用類型一樣具有屬性和方法。

函數(shù)名實(shí)際上是指向函數(shù)對(duì)象的指針,函數(shù)可以作為參數(shù)參與到傳參和返回值中。

函數(shù)的對(duì)象特性

因?yàn)楹瘮?shù)是Function的實(shí)例,而函數(shù)名僅僅是該實(shí)例的一個(gè)引用地址。因此可以作為參數(shù)和返回值參與到函數(shù)的傳參過(guò)程中。

復(fù)制代碼 代碼如下:

function call_some_function(some_function, some_argument) {
    return some_function(some_argument);
}
function add_10(num) {
    return num + 10;
}
console.log(call_some_function(add_10,20)); //30

函數(shù)的內(nèi)部屬性

arguments | this
•arguments對(duì)象中保存著傳遞給函數(shù)的參數(shù)
•arguments.length返回傳入?yún)?shù)的個(gè)數(shù)
•Note: length屬性表示函數(shù)定義時(shí)候默認(rèn)接收的參數(shù)數(shù)量。arguments.length表示函數(shù)實(shí)際執(zhí)行時(shí)接收的參數(shù)數(shù)量。

復(fù)制代碼 代碼如下:

function test_arguments() {
    if (arguments.length == 2) {
        console.log(arguments.length);
        console.log(arguments);
    } else {
        console.log(arguments.length);
        console.log(arguments);
        arguments.callee(4, 5);
    };
}(1, 2, 3)
/**
 3
{ '0': 1, '1': 2, '2': 3 }
2
{ '0': 4, '1': 5 }
 **/

•arguments.callee()主要用在遞歸函數(shù)中調(diào)用函數(shù)自身的情境中。js和別的語(yǔ)言不同在于函數(shù)名只是一個(gè)指針,可以隨時(shí)變化,函數(shù)中利用函數(shù)名來(lái)調(diào)用自身屬于高耦合,可能會(huì)出現(xiàn)問(wèn)題,而arguments.callee()調(diào)用自身就會(huì)規(guī)避掉這個(gè)問(wèn)題

復(fù)制代碼 代碼如下:

function factorial(num) {
    if (num <= 1) {
        return 1;
    } else {
        return num * factorial(num - 1);
    };
}
function callee_f(num) {
    if (num <= 1) {
        return 1;
    } else {
        return num * arguments.callee(num - 1);
    };
}
factorial(10); //運(yùn)行正常
f = factorial;
factorial = null;
f(10); //error
callee_f(10); //運(yùn)行正常
f = callee_f;
callee_f = null;
f(10); //運(yùn)行正常

•this主要用來(lái)幫助函數(shù)引用函數(shù)所處作用域中的對(duì)象。

復(fù)制代碼 代碼如下:

var color = 'red';
function syaColor() {
    console.log(this.color);
}
syaColor(); //red
var o = new Object();
o.color = 'blue';
o.sayColor = sayColor;
o.sayColor(); //blue

call()和apply()

call()和apply()是每個(gè)函數(shù)都包含的自有方法。之前已經(jīng)提到了函數(shù)是定義的對(duì)象,那么調(diào)用函數(shù)時(shí)候,函數(shù)中的this是對(duì)當(dāng)前與下變量的調(diào)用。而如果想改變函數(shù)執(zhí)行所在域空間,則可以使用call()和apply()來(lái)實(shí)現(xiàn)。

復(fù)制代碼 代碼如下:

color = 'red';
var o = {color: 'blue'};
function sayColor() {
    console.log(this.color);
}
sayColor(); //red
sayColor.call(this); //red
sayColor.call(o); //blue

app()和call()的作用是相同的,區(qū)別主要在于傳入?yún)?shù)的不同。

call(this,para1,prar2,prar3) 第一個(gè)參數(shù)是函數(shù)要執(zhí)行的作用域,后面的參數(shù)是函數(shù)的輸入?yún)?shù),有多少個(gè)依次寫多少個(gè)。

apply(this,[para1,para2,prara3])第一個(gè)參數(shù)也是函數(shù)要執(zhí)行的作用域,后面是一個(gè)Array的數(shù)組對(duì)象。

使用call()/apply()來(lái)擴(kuò)充作用域最大的好處是對(duì)象和方法的解耦。

內(nèi)置對(duì)象

Global對(duì)象可以理解成最外層的對(duì)象,所有的對(duì)象,以及不屬于其它對(duì)象的屬性和方法都被包含在Global對(duì)象中。
* isNaN(x) 用來(lái)檢查參數(shù)x是否為數(shù)字。如果為數(shù)字返回false,否則返回true
* isFinite(x) 用來(lái)檢查參數(shù)x是否為無(wú)窮大/小,如果是無(wú)窮大/小,則返回true
* parseInt(x) 用來(lái)解析字符串并返回整數(shù)
* parseFloat(x) 用來(lái)解析字符串并返回浮點(diǎn)數(shù)
* encodeURI()和encodeURIComponent()會(huì)對(duì)字符串進(jìn)行特殊的UTF-8編碼,規(guī)避一些特殊字符來(lái)讓瀏覽器能夠讀懂。他倆的區(qū)別主要在于encodeURI()不會(huì)對(duì)本身屬于URI的特殊字符進(jìn)行編碼,而encodeURIComponent()會(huì)對(duì)其發(fā)現(xiàn)的所有非標(biāo)準(zhǔn)字符進(jìn)行編碼。

復(fù)制代碼 代碼如下:

var uri = "http://www.wrox.com/illegal value.htm#start";
//http://www.wrox.com/illegal%20value.htm#start
console.log(encodeURI(uri))
//http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.htm%23start
console.log(encodeURIComponent(uri))

•對(duì)應(yīng)的解碼函數(shù)為decodeURI()和decodeURIComponent()
•eval(script) 用來(lái)將script的內(nèi)容在解釋器中執(zhí)行并返回對(duì)應(yīng)的結(jié)果。非常強(qiáng)大!

Note:在瀏覽器中,windows對(duì)象封裝了Global對(duì)象,并承擔(dān)了很多額外的任務(wù)和功能。

Math對(duì)象為另一個(gè)內(nèi)置對(duì)象。為JavaScript提供了數(shù)學(xué)計(jì)算功能。

以上就是本文的全部?jī)?nèi)容了,希望小伙伴們能夠喜歡,能夠?qū)Υ蠹矣兴鶐椭?/p>

相關(guān)文章

最新評(píng)論