了解Javascript函数的参数
will.wei 7/29/2021 函数参数
# 了解Javascript函数的参数
Javascript语言可能是世界上最不关心函数参数的语言。它既不关心传入参数的个数,也不关心这些参数的数据类型。所以,嘲讽一个人时,作为一个前端程序员,大可以用“你对社会的价值,就像JS函数里的参数一样————可有可无”。
# arguments对象
在使用function关键字定义(非箭头)函数时,可以在函数内部访问到arguments对象,从中取得传进来的每个参数值。 arguments对象是一个类数组对象
那么什么是类对象数组呢?
类数组对象是指可以通过索引属性访问元素并且拥有length属性的对象
let arrayLike = {
0:'name',
1:'age',
2:'job',
length:3,
}
let arr1 = Array.from(arrayLike); // ['name','age','job']
1
2
3
4
5
6
7
2
3
4
5
6
7
上面例子中的arrayLike
就是类数组对象,并且可以通过Array.from
方法将类数组对象转成数组;
Javascript语言可能是世界上最不关心函数参数的语言。它既不关心传入参数的个数,也不关心这些参数的数据类型。所以,嘲讽一个人时,作为一个前端程序员,大可以用“你对社会的价值,就像JS函数里的参数一样————可有可无”。
事实上,定义函数的参数只是为了方便才写出来的,而不是必须写出来的。在调用函数时,所有的参数都会顺序保存在arguments对象里。命名参数与对应位置的arguments中存储的值是同步的,也就是修改两者任意一个值,会自动同步到对应的另一个值。但这并不是说两者两者访问同一个内存地址,它们在内存中还是分开的,只不过会保持同步而已。如果传入的参数比命名参数少了,那么后面的参数就自动设值为undefined,这就是定义了变量而没有初始化。
# ES6的默认参数值
在ES6的写法中,只要在函数定义的参数后用=就可以为参数赋一个默认值。
function createPeople(name='will',age='29',job='engineer'){
return `Hello, My name is ${name}, ${age}, and I am a ${job}.`;
}
createPeople() // "Hello, My name is will, 29, and I am a engineer."
1
2
3
4
5
2
3
4
5
# 默认参数作用域 与 暂时性死区
- 函数的多个参数设置默认参数时类似使用let顺序声明多个变量
- 如果有参数A的默认值是某一个参数B,那么B的声明必须在前面,否则会出现暂时性死区