// 전역
var x = 'global';
function foo () {
// 지역
var x = 'function scope';
console.log(x);
}
foo(); // ?
console.log(x); // ?
int main(void) {
// block-level scope
if (1) {
int x = 5;
printf("x = %d\n", x);
}
printf("x = %d\n", x); // use of undeclared identifier 'x'
return 0;
}
var x = 0;
{
var x = 1;
console.log(x); // 1
}
console.log(x); // 1
let y = 0;
{
let y = 1;
console.log(y); // 1
}
console.log(y); // 0
var global = 'global';
function foo() {
var local = 'local';
console.log(global);
console.log(local);
}
foo();
console.log(global);
console.log(local); // Uncaught ReferenceError: local is not defined
if (true) {
var x = 5;
}
console.log(x);
var a = 10; // 전역변수
function () {
var b = 20; // 지역변수
};
console.log(a); // 10
console.log(b); // "b" is not defined
var x = 'global';
function foo() {
var x = 'local';
console.log(x);
}
foo(); // local
console.log(x); // global
var x = 'global';
function foo() {
var x = 'local';
console.log(x); // local
function bar() { // 내부함수
console.log(x); // local
}
bar();
}
foo();
console.log(x); // global
var x = 10;
function foo() {
x = 100;
console.log(x);
}
foo();
console.log(x); // ?
var x = 10;
function foo(){
var x = 100;
console.log(x); // 100
function bar(){ // 내부함수
x = 1000;
console.log(x); // 1000
}
bar();
console.log(x); // 1000
}
foo();
console.log(x); // 10
bar() 구문 아래있는 콘솔로 bar 함수가 실행된후 foo 의 지역변수 x가 1000으로 재할당 된것을 알수있다.
var foo = function ( ) {
var a = 3, b = 5;
var bar = function ( ) {
var b = 7, c = 11;
// 이 시점에 3,7,11
a += b + c;
// 이 시점에 21,7,11
};
// 이 시점에 3,5,d
bar( );
// 이 시점에 21,5,d
};
foo();
var x = 1;
function foo() {
var x = 10;
bar();
}
function bar() {
console.log(x);
}
foo(); // 1
bar(); // 1
어디서 호출 했는가는 전혀 중요하지않다. 어디에 선언되어 있느냐만 보기 때문이다.
var x = 10; // 전역 변수
function foo () {
console.log(y) // y is not defined
function bar() {
y = 20;
console.log(x + y);
}
bar();
console.log(y) // 20
}
foo(); // 30
첫번째 콘솔 y는 not defined 에러가 나지만, bar 함수를 실행하고 나서 암묵적으로 window.y = 20 프로퍼티가 할당 되었다. 후에 두번째 콘솔에서는 전역변수 y를 20 을 출력한다.
// 전역 변수 x는 호이스팅이 발생한다.
console.log(x); // undefined
// 전역 변수가 아니라 단지 전역 프로퍼티인 y는 호이스팅이 발생하지 않는다.
console.log(y); // ReferenceError: y is not defined
var x = 10; // 전역 변수
function foo () {
// 선언하지 않은 변수
y = 20;
console.log(x + y);
}
foo(); // 30
var x = 10; // 전역 변수
function foo () {
// 선언하지 않은 변수
y = 20;
console.log(x + y);
}
foo(); // 30
console.log(window.x); // 10
console.log(window.y); // 20
delete x; // 전역 변수는 삭제되지 않는다.
delete y; // 프로퍼티는 삭제된다.
console.log(window.x); // 10
console.log(window.y); // undefined
var MYAPP = {};
MYAPP.student = {
name: 'Lee',
gender: 'male'
};
console.log(MYAPP.student.name);
(function () {
var MYAPP = {};
MYAPP.student = {
name: 'Lee',
gender: 'male'
};
console.log(MYAPP.student.name);
}());
console.log(MYAPP.student.name);