JavaScript 理解函数的参数
2017-12-06 本文已影响35人
赵者也
ECMAScript 函数的参数与大多数其他语言中函数的参数有所不同。ECMAScript 函数不介意传递进来多少个参数,也不在乎传进来的参数是什么数据类型。也就是说,即便我们定义的函数是只接收两个参数的,在调用该函数时也未必一定要传递两个参数。我们可以传递一个、三个或者一个也不传,而解析器永远不会报错或发出警告。这是因为 ECMAScript 中的参数在内部是用一个数组来表示的。函数接收到的其实始终是这个数组,而不关心数组中包含哪些参数。实际上,在函数体内可以通过 arguments 对象来访问这个参数数组,从而获取传递给函数的每一个参数。
其实,arguments 对象只是与数组类似(它并不是 Array 的实例),因为可以使用方括号语法访问它的每一个元素(即第一个元素是 arguments[0],第二个元素是 arguments[1],并以此类推),我们可以使用 length 属性来确定传递进来多少个参数。
下面是一个使用实例:
Item {
id: testA
property string sayHello: "hello world"
property string sayBye: "goodbye"
function sayHi(words) {
console.log("sayHi: ", words, arguments[1])
console.log("sayHi: ", arguments[0], arguments[1])
}
}
Item {
id: testB
Component.onCompleted: {
// js start
testA.sayHi("hello","everyone")
// js end
}
}
输出结果:
输出结果从实际的使用以及输出结果来看,我们可以知道,为函数提供命名的参数只是提供便利,但不是必需的。
通过访问 arguments 对象的 length 属性可以获知有多少个参数传递给了函数。
开发人员可以利用这一点让函数接收任意个数的参数,并根据参数的个数来决定实现怎样的功能。
虽然 ECMAScript 没有重载,但是这一特性也可以算是一种弥补。