javascript/express
함수에서 변수를 명시하지 않았는데 할당됐다
choi-dev
2024. 9. 13. 14:47
작업 내용에 대해 코드 리뷰를 진행하던 도중에 함수를 통해 얻은 객체의 데이터로 바인딩하지 않고 아무것도 초기화되지 않은 값을 넣어버리는 실수를 했다. 당연히 undefined일 것이라 생각했고 데이터를 찍어보았는데 값이 제대로 넘어오는 이상한 상황이 연출되었다. 그냥 넘어가기에는 상당히 미심쩍은 부분들이 많아 수석님과 찾아보았고 원인은 예상치 못한 곳에 있었다.
함수를 통해 얻은 부분에서 해당 함수를 다시 점검해보니 객체를 리턴해주기 전에 내가 변수를 초기화해주질 않았었다. 타입스크립트가 아닌 자바스크립트 기반의 노드로 운영되다보니 발생한 문제였고 이는 자바스크립트의 특성에서 비롯되었다.
암묵적 전역변수 발생
자바스크립트에서는 var, let 또는 const로 변수를 선언하지 않고 값을 할당한다면 해당 변수에 대해 에러가 아닌 암묵적으로 전역 스코프에 선언이 된다. 즉, 내가 변수 선언하지 않고 값을 할당한다면 global 전역변수에 등록되어 어디든지 접근해버리는 객체가 되어버리는 것이다.
이를 암묵적 전역변수 선언이라 한다.
다행히 사용하는 곳이 한 부분이고 아직 미사용되던 부분이라 에러를 초래하지는 않았으나 큰 실수를 이어져버릴 상황이었다는 것이 각인되었다. 타입스크립트를 사용하지 않는다면 변수 선언에 대해서는 다시 한 번 확인해볼 필요성이 있다고 느낀다.