函數知多少(二)

前言

上次聊了關於定義函數的知識,還有參數方面的,此次先補充一點參數小知識,還有簡單的講一下閉包。數組

arguments對象

引入的參數會保存在arguments數組對象中,第一個引入的參數保存在aruguments[0]中,以此類推,參見如下代碼:閉包

var myArr = ["hangzhou", "shanghai", "beijing", "guangzhou"];
function foo(obj) {
    console.log(arguments[0]);//["hangzhou", "shanghai", "beijing", "guangzhou"];
    console.log(arguments[0][1]);//shanghai
}
foo(myArr);

閉包

function outside(x) {
    function inside(y) {
        return x + y;
    }
    return inside;
}

fun_inside = outside(5);
console.log(fun_inside);
result = fun_inside(3);//return 8
result1= outside(5)(3);//return 8

咱們都知道,函數內部是能夠讀取外部定義的變量的。在這裏,outside函數包含了一個內部函數inside,因此inside能夠使用outside引入的參數。咱們把函數inside做爲返回值賦給fun_inside,固然,同時返回的還有x。此時咱們再執行fun_inside而且傳入一個y就能返回二者之和,最後一行只是把兩個參數同時傳入,其餘無異,這就是一個很簡單的閉包。
下面是執行這段代碼後監視窗的結果。
閉包結果
更深刻的下一期再講,由於做者也正在學習啦~~ide

課後題?

var myArr = ["hangzhou", "shanghai", "beijing", "guangzhou"];
console.log(myArr);//["hangzhou", "shanghai", "beijing", "guangzhou"]
console.log("test:" + myArr);//test:hangzhou,shanghai,beijing,guangzhou

爲何輸出內容會不一樣呢?做者到如今也不解,不過對程序運行是沒有影響的。有大神懂的話,求指導???函數

相關文章
相關標籤/搜索