跳到主要内容

函数知多少(二)

· 阅读需 2 分钟

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

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 就能返回两者之和,最后一行只是把两个参数同时传入,其他无异,这就是一个很简单的闭包。

下面是执行这段代码后监视窗的结果。

闭包结果