전역변수와 지역변수
자바스크립트에서 전역(global)를 만드는 일은 최대한 지양해야합니다.
전역변수란 자바스크립트에서 제일 바깥범위에 변수를 만드는 것입니다.
즉, window 객체에 변수를 만드는 겁니다.
let x = 'global';
function example() {
let x = 'local';
x = 'change';
}
example(); // x를 change 한다.
alert(x); // 전역변수를 선언 하였기 때문에 'global' -> change로 바뀌지 않고 그대로 값이 유지된다.
var x = 'global';
function example() {
x = 'change';
}
example();
alert(x); // 'change'
example 함수 안에서 변수를 선언하지 않음 -> 자바스크립트는 변수의 범위를 호출한 함수의 지역 스코프부터 전역 변수들이 있는 전역 스코프까지 점차 넓혀 찾기 때문이다.
--> 내부함수에서는 외부함수의 변수에 접근 가능하지만, 외부함수에서는 내부함수의 변수에 접근할 수 없다.
-->
var name = 'inyong';
function outer() {
console.log('외부', name);
function inner() {
var enemy = 'nero';
console.log('내부', name);
}
inner();
}
outer();
console.log(enemy); // undefined
스코프는 함수를 호출할 때가 아니라 선언할 때 생깁니다. 정적스코프 라고도 합니다.
var name = 'zero';
function log() {
console.log(name);
}
function wrapper() {
name = 'nero';
log();
}
wrapper();
정답은 nero 입니다.
var name = 'zero';
function log() {
console.log(name);
}
function wrapper() {
var name = 'nero';
log();
}
wrapper();
정답은 zero 입니다. 스코프는 함수를 선언할 때 생깁니다.
다시 설명 드리자면 함수를 처음 선언하는 순간, 함수 내부의 변수는 자기 스코프로부터 가장 가까운 곳에 있는 변수를 참조하게 됩니다.
출처: https://www.zerocho.com/category/JavaScript/post/5740531574288ebc5f2ba97e