[javascript] 스트릭트 모드(strict mode)에서 실행 컨텍스트 동작은 어떻게 달라지는가?
  1. 변수 선언의 필수화: 스트릭트 모드에서는 변수를 선언하지 않고 값을 할당하거나 읽을 수 없습니다. 이로써 변수 이름의 오타나 스코프 충돌 등을 미리 방지할 수 있습니다.

  2. 전역 변수와 eval(): 스트릭트 모드에서 eval() 함수 내에서 선언된 변수는 eval() 함수의 스코프 내에서만 유효하며, eval 코드가 스트릭트 모드를 실행하더라도 전역 스코프에 변수가 추가되지 않습니다.

  3. 함수 매개변수와 arguments 객체: 스트릭트 모드에서는 동일한 함수 매개변수 이름을 허용하지 않으며, arguments 객체에 대한 변경이 함수 매개변수에 반영되지 않습니다.

  4. delete 연산자 사용 제한: 스트릭트 모드에서는 delete 연산자로 변수, 함수, 함수 매개변수를 삭제하는 것이 허용되지 않습니다.

  5. 엄격한 eval(): 스트릭트 모드에서는 eval() 함수를 호출할 때, 호출 스코프를 그대로 이어받지 않으므로 eval 코드 내의 변수와 함수가 호출 스코프를 오염시키지 않습니다.

스트릭트 모드를 사용함으로써 코드의 안전성을 높이고 오류를 줄일 수 있지만, 기존의 코드와의 호환성 문제와 일부 기능의 제약이 있을 수 있습니다. 때문에 개발 환경과 요구 사항에 맞게 적절히 선택하여 사용하여야 합니다.

이와 관련한 더 자세한 정보는 MDN web docs를 참고하실 수 있습니다.