Skip to content

Latest commit

 

History

History
executable file
·
79 lines (65 loc) · 1.62 KB

5. rest parameter.md

File metadata and controls

executable file
·
79 lines (65 loc) · 1.62 KB

5. rest parameter (나머지 매개변수)

5-1. 소개

// argument는 parameter에 영향을 준다
function foo (a, b) {
  a = 1
  arguments[0] = 2
  console.log(a, arguments[0])
}
foo(10, 20)
function f (x, y) {
  // 나머지를 처리하기 위한 기존 로직
  var rest = Array.prototype.slice.call(arguments, 2)
  console.log(rest)
}
f(1, 2, true, null, undefined, 10)
// ... 나머지로 쓸 수 있음 
const f = function (x, y, ...rest) {
  console.log(rest)
}
f(1, 2, true, null, undefined, 10)

5-2. 상세

1) ...[매개변수명]

2) 오직 한 번, 매개변수의 가장 마지막에서만 사용가능

// Uncaught SyntaxError: Rest parameter must be last formal parameter
const f = function (_first, ...rest, _last) {
  console.log(_first, _last)
}
f(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

3) 객체의 setter에서 사용불가

  • 하나의 key 에는 하나의 value 밖에 없음, 1:1 대응이기에 setter 함수에는 restparameter 사용 불가
let person = {
  name: 'name',
  age : 30,
  get personInfo(){
    return this.name + ' ' + this.age
  },
  set personInfo (...val) {
    this.name = val[0]
    this.age  = val[1]
  }
}
console.log(person.personInfo)

4) arguments를 대체

  • 기존에 쓰고 있던 arguments를 대체 할 수 있음
function argsAlternate (...args) {
  console.log(args.length, arguments.length)
  console.log(args[0], arguments[0])
  console.log(args[args.length - 1], arguments[arguments.length - 1])
  args[1] = 10
  arguments[1] = 20
  console.log(args[1], arguments[1])
}
argsAlternate(1, 2, 3, 4)