首页 > 语言 > JavaScript > 正文

深入理解javascript函数参数与闭包

2024-05-06 15:05:12
字体:
来源:转载
供稿:网友

最近在学习javascript的函数,函数是javascript的一等对象,想要学好javascript,就必须深刻理解函数。本人把学习的过程整理成文章,一是为了加深自己函数的理解,二是给读者提供学习的途径,避免走弯路。内容有些多,但都是笔者对于函数的总结。

1.函数参数

  1.1:参数是什么

  1.2:参数的省略

  1.3:参数默认值

  1.4:参数传递方式

  1.5:同名参数

  1.6:arguments对象

2.闭包

  2.1:闭包定义

  2.2:立即调用的函数表达式(IIFE, Immediately invoked function expression)

1.函数参数

 1.1:参数是什么

 在定义一个函数时,有时候需要为函数传递额外的数据,不同的外部数据会得到不同的结果,这种外部数据就叫做参数。

 function keith(a){ return a+a; } console.log(keith(3)); //6

上面代码中,给keith函数传递了参数a,并且返回了a+a表达式。

1.2:参数的省略

函数参数不是必须的,javascript规范允许省略调用时传递的实际参数。

 function keith(a, b, c) { return a; } console.log(keith(1, 2, 3)); //1 console.log(keith(1)); //1 console.log(keith()); // 'undefined'

上面代码中,keith函数定义了三个参数,但是在调用时无论传递了多少个参数,javascript都不会报错。被省略的参数的默认值就变为undefined。了解函数定义与函数作用域 的都知道,函数的length属性会返回参数个数。需要注意的是,length属性与实际参数的个数无关,只是返回形式参数的个数。

(实际参数:调用时传递的参数。     形式参数:定义时传递的参数。)

但是没有办法省略只靠前的元素,而保留靠后的元素。如果一定要省略靠前的元素,只有显示传入undefined。

 function keith(a, b) { return a; } console.log(keith(, 1)); //SyntaxError: expected expression, got ',' console.log(keith(undefined, 2)); //'undefined'

上面代码中,如果省略了第一个参数,浏览器就会报错。如果给第一个参数传递undefined,则不会报错。

1.3:默认值

在JavaScript中,函数参数的默认值是undefined。然而,在某些情况下设置不同的默认值是有用的。一般策略是在函数的主体测试参数值是否为undefined,如果是则赋予一个值,如果不是,则返回实际参数传递的值。

 function keith(a, b) { (typeof b !== 'undefined') ? b = b: b = 1; return a * b; } console.log(keith(15)); //15 console.log(keith(15, 2)) //30

上面代码中,做了个判断。当在调用时没有传入b参数,则默认为1。

从ECMAScript 6开始,定义了默认参数(default parameters)。使用默认参数,在函数体的检查就不再需要了。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选