JavaScript의 변수와 유효성범위

devlsn96·2024년 9월 25일
0

1. 유효성 범위

// 전역변수
var vsscope = 'global';
function fscope(){
	// 지역변수
	var lv = 'local val';
	alert(lv);
}
fscope();
// 실행 X
alert(lv);

1-1. 전역변수

  • 함수 밖에서 변수가 생성이 되면 함수 안에서 그 변수는 유효한 값을 가진다.

1-2. 지역변수

  • 함수 안에서 변수가 생성이 되면 함수 밖에서는 그 변수는 유효하지 못한다.

2. var 변수선언의 문제점

var name = 'html';
console.log(name);
var name = 'javascript';
console.log(name);
  • 변수 선언을 재 선언했음에도 에러 안나오고 각기 다른 값이 출력되는 걸 볼 수 있다.
  • 이는 유연한 변수선언으로 간단한 테스트에서는 편리할 수 있으나,
  • 코드량이 많아 지면 (유지 보수측면에서) 언제, 어떻게 사용될 지 파악되기 힘들고 값이 바뀔 우려가 있다.
  • ES6이후 이를 보완하기 위해 추가된 변수선언방식이 let과 const이다.

2-1. let과 const의 차이점

  • let : 변수에 재할당이 가능
  • const : 변수 재선언, 변수 재할당 모두 불가능
  • 변수 선언에는 기본적으로 const를 사용하고
    재할당이 필요한 경우에 한정해 let을 사용하는게 좋다.
  • const를 사용하면 의도치 않은 재할당을 방지해주기 때문이다.

3. JavaScript 호이스팅

  • javascript 호이스팅은 인터프리터가 코드를 실행하기전
    함수, 변수, 클래스 또는 임포트(import)의 선언문을 해당 범위 맨 위로 끌어올리는 것처럼 보이는 현상

  • function이 만들어지는 시점과 호출되는 시점의 코드상 차이는 있으나 자바스크립트 호이스팅 현상으로 정상작동

  • 그러나 함수 표현식은 호이스팅이 적용되지 않는다.

🎁 컴파일 언어와 인터프리터언어

1. 인터프리터(interpreter)란,

우리말로 '통역사'라는 뜻이다. 우리가 컴퓨터에 명령을 내리면 한 줄씩 즉시 통역사가 컴퓨터 언어로 바꿔주는 거라고 생각하면 된다.

  • 규모가 큰 소스의 경우, 컴파일 언어는 프로그램 실행 전 먼저 기계어로 컴파일하는 데 시간이 오래 걸릴 수 있는데 인터프리터 언어는 코드를 한 번에 한 줄씩 읽어 들이면서 바로 실행이 가능하다.
  • 즉, 한 줄 씩 명령을 내리다 보니, 그 명령 자체의 속도는 컴파일러 언어에 비해 느림.
  • 그래도 인터프리터 언어는 고급 프로그램을 즉시 실행시킬 수 있어 프로그램 수정이 간단함.
  • 자바스크립트, 파이썬, 루비, sql 등이 있다.

2. 컴파일 언어란,

소스코드를 한꺼번에 다른 목적 코드로 번역한 후, 한 번에 실행하는 프로그램(언어).

  • 컴퓨터 하드웨어(cpu)가 알아들을 수 있는 로우 레벨 언어(예, 어셈블리 언어, object 코드, machine code)로 번역됨. 이후 컴파일하게 되면 실행 가능한(바이너리) 파일(프로그램)이 생성됨. 즉 번역과 실행이 따로 이루어진다.
  • 한 줄씩 명령을 내리는 게 아니라, 명령들을 다 모아놓고 한 번에 실행하는 방식임. 코드를 다 적고 나서 한꺼번에 검사하는 형태라고 보면 됨.
  • 규모가 큰 소스의 경우, 컴파일된 프로그램의 경우 일반적으로 인터프리터를 이용해 실행시키는 것보다 훨씬 빠르게 동작 하나, 컴파일 과정에서는 시간이 상당히 많이 소요되고 메모리도 많이 차지함.
  • 소스코드를 기계어로 번역하는 과정이 빌드 과정. 고급언어가 변환되어 로우 레벨 언어(기계어) 이런 빌드 과정을 거쳐서 실행파일을 생성함
  • C, C++, C#, Go 등이 있다.
    출처 : https://eunjinii.tistory.com/4
profile
Quantum Jump to class for java….

0개의 댓글