首頁 > web前端 > js教程 > JavaScript中Function詳解_javascript技巧

JavaScript中Function詳解_javascript技巧

WBOY
發布: 2016-05-16 16:12:47
原創
1246 人瀏覽過

關鍵字function用來定義函數。

複製程式碼 程式碼如下:

//函數宣告式定義:
function funcname([arg1[,args[...,argn]]]){
 statements
}
//函數表達式定義:
var funcname = function ([arg1[,args[...,argn]]]){
 statements
};

注意,function語句裡的花括號是必要的,即使函數體只包含一條語句。

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

函數名稱實際上是指向函數物件的指針,函數可以作為參數參與傳參和返回值。

函數的物件特性

因為函數是Function的實例,而函數名稱只是該實例的一個引用位址。因此可以作為參數和返回值參與到函數的傳參過程中。

複製程式碼 程式碼如下:

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

函數的內部屬性

arguments | this
•arguments物件中保存著傳遞給函數的參數
•arguments.length傳回傳入參數的個數
•Note: length屬性表示函數定義時候預設接收的參數數量。 arguments.length表示函數實際執行時接收的參數數量。

複製程式碼 程式碼如下:

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()主要用在遞歸函數中呼叫函數本身的情境。 js和別的語言不同在於函數名稱只是一個指針,可以隨時變化,函數中利用函數名稱來調用自身屬於高耦合,可能會出現問題,而arguments.callee()調用自身就會規避掉這個問題

複製程式碼 程式碼如下:

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

•this主要用來幫助函數引用函數所處作用域中的物件。

複製程式碼 程式碼如下:

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()是每個函數都包含的自有方法。之前已經提到了函數是定義的對象,那麼呼叫函數時候,函數中的this是對目前與下變數的呼叫。而如果想要改變函數執行所在域空間,則可以使用call()和apply()來實作。

複製程式碼 程式碼如下:

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

app()和call()的作用是相同的,差異主要在於傳入參數的差異。

call(this,para1,prar2,prar3) 第一個參數是函數要執行的作用域,後面的參數是函數的輸入參數,有多少個依序寫幾個。

apply(this,[para1,para2,prara3])第一個參數也是函數要執行的作用域,後面是一個Array的陣列物件。

使用call()/apply()來擴充作用域最大的好處是物件和方法的解耦。

內建物件

Global對象可以理解成最外層的對象,所有的對象,以及不屬於其它對象的屬性和方法都被包含在Global對像中。
* isNaN(x) 用來檢查參數x是否為數字。如果為數字回傳false,否則回傳true
* isFinite(x) 用來檢查參數x是否為無限大/小,如果是無限大/小,則回傳true
* parseInt(x) 用來解析字串並傳回整數
* parseFloat(x) 用來解析字串並傳回浮點數
* encodeURI()和encodeURIComponent()會對字串進行特殊的UTF-8編碼,規避一些特殊字元來讓瀏覽器能夠讀懂。他兩人的差異主要在於encodeURI()不會對本身屬於URI的特殊字元進行編碼,而encodeURIComponent()會對其發現的所有非標準字元進行編碼。

複製程式碼 程式碼如下:

var uri = "http://www.wrox.com/illegal value.htm#start";
//http://www.wrox.com/illegal value.htm#start
console.log(encodeURI(uri))
//http://www.wrox.com/illegal value.htm#start
console.log(encodeURIComponent(uri))

•對應的解碼函數為decodeURI()和decodeURIComponent()
•eval(script) 用來將script的內容在解譯器中執行並傳回對應的結果。非常強大!

Note:在瀏覽器中,windows物件封裝了Global對象,並承擔了許多額外的任務和功能。

Math物件為另一個內建物件。為JavaScript提供了數學計算功能。

以上就是本文的全部內容了,希望朋友們能夠喜歡,能夠對大家有所幫助。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板