ES6参数默认值 参数默认值对arguments的影响 暂时性死区

ES6引入参数默认值简化了函数调用,允许在定义函数时直接给形参赋默认值。在严格模式下,参数默认值与arguments对象是分离的,避免了非严格模式下的一些问题。同时,形参与let/const声明一样,存在暂时性死区,避免了变量提升导致的冲突。理解这些特性对于优化JavaScript代码至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参数默认值

一般情况下,在函数传递参数时,会将参数全部传入,而很多情况下在参数变多的时候有些时候就会变得麻烦起来,而很多种情况下有一大部分参数都是不会变的,因为既要保证灵活性,同时又要方便的调用这样就在ES6中引入了一个新的概念:参数默认值

在之前我们要完成这样一个默认值的方法需要些很多的代码比较麻烦,而在ES6中书写形参时直接给形参赋值,赋的值即为默认值。

这样一来当调用函数时,如果没有给对应的参数赋值,给它的值是undefined则会自动使用默认值

  • 注意一定得是undefined不能是null,因为null在数学运算中null为0。

	function sun (a, b = 1, c = 2) {}
	sun(1, undefined,undefined)//此时也可以不写

且不光可以是字面量,也可以是表达式。

参数默认值对arguments的影响

在严格模式下arguments跟形参是脱离的,而在非严格模式下则是不脱离的。


	function test(a, b) {
	    console.log("arguments", arguments[0], arguments[1]);
	    console.log("a:", a, "b:", b);//此时我们输出abarguments和a的值是一样的
	    a = 3;//在设定好之后我们更改a值
	    console.log("arguments", arguments[0], arguments[1]);
	    console.log("a:", a, "b:", b);//此时在非严格模式下是没有变化的
	}

而在严格模式下arguments是不会发生改变的,也就是说你要么用arguments要么直接更改。

而只要给函数加上参数默认值,该函数会自动变成严格模式下的规则arguments和形参脱离。


	function test(a, b = 1) {
	    console.log("arguments", arguments[0], arguments[1]);
	    console.log("a:", a, "b:", b);//此时我们输出abarguments和a的值是一样的
	    a = 3;//在设定好之后我们更改a值
	    console.log("arguments", arguments[0], arguments[1]);
	    console.log("a:", a, "b:", b);//此时在严格模式下是脱离的的
	}

arguments在以后尽量就不要使用了在后面我会讲到具体原因的。

留意暂时性死区

形参和ES6中的letconst声明一样,具有作用域,并且根据参数的声明顺序,存在暂时性死区。

这是什么意思呢,让我们来举个例子:


	function test (a, b = a) {
		console.log(a, b)
	}
	test(1, 2)//在这种情况下是完全没问题的,因为我们并没用到默认值
	
	function test (a, b = a) {
		console.log(a, b);
	}
	test(1, undefined)//在这种情况下也是没有问题的因为我们是先给a赋值再让b = a所以没问题
	
	function test (a = b, b) {
		console.log(a, b);
	}
	test(undefined, 2)//在这种情况下就会报错

而报错的原因就是我们在没有给a设置制值的情况下会在声明之后将其存入暂时性死区里,之后在有任何改动,比如赋值的情况下会将其取出。

所以我们在以后我们在使用let定义变量名的时候不能与形参重复。

以上就是参数默认值的介绍和其他扩展的知识希望对你有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值