前言

上次聊了关于定义函数的知识,还有参数方面的,这次先补充一点参数小知识,还有简单的讲一下闭包。

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就能返回两者之和,最后一行只是把两个参数同时传入,其他无异,这就是一个很简单的闭包。
下面是执行这段代码后监视窗的结果。
闭包结果
更深入的下一期再讲,因为作者也正在学习啦~~

课后题?

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

为什么输出内容会不同呢?作者到现在也不解,不过对程序运行是没有影响的。有大神懂的话,求指导???


BingqiChen
571 声望28 粉丝

Everything should be perfect.