이 경우 _inserNode라는 메서드가 만약 노드가 null인 상태면 새로운 노드를 value 넣어 만들어준다음 return node;로 반환해준다. 이때 함수를 통해 들어온 node라는 매개변수는 객체이고 외부의 참조값이므로 이 객체의 상태가 변경되는 것과 같은 할당으로 보고 부작용을 막기 위해 아예 새로운 객체를 만들어 그 객체를 통해 변경시키는 것을 권장한다.
따라서 ESLint에서 이에 대해 rules를 끄는 것이 아니라 다른 해결방법을 찾아야 했다. (한 줄에만 적용하는 방식도 있긴 하다. : /* eslint-disable no-param-reassign */ )
그래서 newNode 변수를 만들어 새로운 node 객체를 생성한 다음 그것을 리턴해주는 방식을 사용했다.
BinaryTree.prototype._insertNode = function (node, value) {
if (node === null) {
// ESLint) Assignment to function parameter 'node' <- node = new Node(value);
const newNode = new Node(value);
return newNode;
}
if (value < node.value) {
node.left = this._insertNode(node.left, value);
} else if (value > node.value) {
node.right = this._insertNode(node.right, value);
}
return node;
};
JavaScript
복사