ES6函数扩展(函数参数默认值)

本文深入探讨JavaScript函数中默认参数的基本使用方法及作用域问题,通过实例解析如何正确使用默认参数,避免常见错误。

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

一、函数的默认参数基本使用方法
function test(x,y = "hello"){
	console.log("函数参数:",x,y);
}
test("winne");      //函数参数:winne hello
test("winne","hi"); //函数参数:winne hi

如上代码我们可以看出,当函数参数有了默认值可以不传入那个参数,那么就直接使用默认的参数。

注意:参数变量是默认声明的,不能用let和const再次声明:

function f (a = 1){
    let a = 2; // Uncaught SyntaxError: Identifier 'a' has already been declared
}

注意:默认值后面不能再出现没有默认值的参数!

二、关于默认参数的作用域问题
let x = "test";
function test(x,y = x){
	console.log("作用域问题:",x,y);
}
function test2(a,y = x){
	console.log("作用域问题:",a,y);
}

test();         //作用域问题:undefined  undefined
test("winne");  //作用域问题:winne  winne
test2("雪");    //作用域问题:雪  test

1、分析下上面的代码test()为什么x,y都是undefined呢?
主要是在函数的参数中也是对变量x进行了声明,其实为下面写法的简写,一般省略了let:

function test(let x, let y = x){
	console.log("作用域问题:",x,y);
}

此时在调用test()的时候什么参数都没有传入,那么函数参数那里的声明就是的x为undefined了,所以再赋值给y,那么y也是undefined了。

2、分析代码调用test2(“雪”)为什么a = “雪” ,y = “test” ?
首先我们知道,a = "雪"是传入的参数。那么第二个参数y没有传入,在函数参数的y声明中把x赋值给了y,但是此时x并不能在函数参数中找到有他的声明,那么他就会像上级(父级作用域查找),找到了let x = “test” ,这时拿到了x的值就赋值了y了。

ps:这里对作用域的理解如果还是不够理解,点击下面链接去学习一下js的执行上下文和js作用域。
https://blog.youkuaiyun.com/m0_38134431/article/details/84983396

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值