JavaScript 함수 내의 전역 변수

JavaScript에서(다른 언어에서는 대부분 그렇지 않습니다) 함수 외부에서 정의된 변수는 해당 함수 내부에서 보입니다. 이러한 변수를 전역(global) 변수라고 합니다. 예제를 살펴보겠습니다:

javascriptlet num = 1; // 함수 외부의 변수

function func() {
  console.log(num); // 함수 내부에서 변수 num이 보임
}

func(); // 1을 출력

사실 변수는 함수 정의 전이 아니라 함수 호출 전에 정의되어야 합니다:

javascriptfunction func() {
  console.log(num);
}

let num = 1; // 함수 외부의 변수
func();      // 1을 출력

변수의 값을 변경하고 그 후에 매번 함수를 호출하면 - console.log는 매번 다른 결과를 출력할 것입니다:

javascriptfunction func() {
  console.log(num);
}

let num; // 변수 선언

num = 1; // 값 1 할당
func();  // 1 출력

num = 2; // 값 2 할당
func();  // 2 출력

여러 함수가 있는 경우, 전역 변수는 각 함수에서 접근 가능할 것입니다:

javascriptfunction func1() {
  console.log(num);
}

function func2() {
  console.log(num);
}

let num = 1;

func1(); // 1 출력
func2(); // 1 출력

함수 중 하나에서 전역 변수를 변경하면, 해당 변수를 사용하는 모든 함수에서 그 변수가 변경될 것입니다:

javascriptfunction func1() {
  console.log(num);
  num++; // 전역 변수 변경
}

function func2() {
  console.log(num);
}

let num = 1;

func1(); // 1 출력
func2(); // 2 출력

어떤 함수라도 쉽게 전역 변수를 변경할 수 있기 때문에, 그 사용은 발견하기 어려운 오류의 온상이 됩니다. 이런 이유로 스크립트 내에서 전역 변수 사용을 최소화해야 합니다. 가능하면 아예 없거나 최소한의 수만 있도록 하는 것이 바람직합니다.

Задание 1

코드를 실행하지 않고 콘솔에 무엇이 출력될지 결정하세요:

javascriptlet num = 1;
    
function func() {
  console.log(num);
}

func();
Задание 2

코드를 실행하지 않고 콘솔에 무엇이 출력될지 결정하세요:

javascriptlet num = 1;
    
function func() {
  console.log(num);
}

num = 2;
func();
Задание 3

코드를 실행하지 않고 콘솔에 무엇이 출력될지 결정하세요:

javascriptfunction func() {
  console.log(num);
}

let num;

num = 1;
func();

num = 2;
func();