babel es2015 에서 arguments 를 사용할 때 유의할 점.
babel 을 이용해서 es2015 를 사용하는데, arguments 를 사용해서 작성된 code 가 원하지 않은 방향으로 compile 됐다.아래와 같이 arguments 를 사용하는 code 를 사용하는데, 이것을 babel es2015 를 이용해서 transpile 했다.
var extend = (out) => {
out = out || {};
for (var i = 1; i < arguments.length; i++) {
if (!arguments[i])
continue;
for (var key in arguments[i]) {
if (arguments[i].hasOwnProperty(key))
out[key] = arguments[i][key];
}
}
return out;
};
그랬더니 arguments 를 외부에서 가져왔다. 이 arguments 는 여기 에서 보듯이 function 으로 넘어오는 parameter 를 가지고 있는 built-in object 이다.
그런데 이녀석을 외부에서 가져와서 값이 이상해 졌다.
수정
이것을 변하지 않도록 하는 법은 모르겠다. 하지만 arguments 를 사용하도록 하는 법은 아래처럼 수정하면 가능했다.(참고)
var extend = (...args) => {
var out = args[0] || {};
for (var i = 1; i < args.length; i++) {
if (!args[i])
continue;
for (var key in args[i]) {
if (args[i].hasOwnProperty(key))
out[key] = args[i][key];
}
}
return out;
};
호오.. 바벨을 오래 썼지만 잘못 트랜스파일 되는 경우도 있군요. 좋은 정보 감사합니다.
답글삭제