코플릿 풀다가 if문 안에 !key in obj
이렇게 적으니까 안되따!~!
key in obj === false
값을 검사하고 싶을 때는
!(key in obj)
이렇게 괄호로 감싸주면 된다
원시 자료형 같은 경우 값 자체에 대한 변경이 불가능하지만, 변수에 다른 데이터를 할당 할 수 있다.
원시 자료형은 stack
에,
참조 자료형은 heap
에 저장된다
Scope
를 가진다1let greeting = "Hello";2function greetSomeone() {3 let fistName = "Josh";4 return greeting + " " + firstName;5}6greetingSomeone(); // => "Hello Josh"7firstName; // => ReferenceError
함수 안(Local Scope
)에서 선언된 변수는 영역 밖에서 사용할 수 없다
Global Scope
는 최상단의 Scope로, Global Scope
에서 정의된 변수(전역 변수)는 어디서든 접근이 가능하다Local Scope
)는 함수 내에서 전역 변수보다 더 높은 우선순위를 가진다.1✅ let name = "Richard";2function showName() {3 ✅ let name = "Jack"; // 지역 변수4 console.log(name);5}6console.log(name); // Richard7showName(); // Jack8console.log(name); // Richard
위 코드에서 ✅ 부분에 선언된 변수들은 서로 다른 변수이다. (전역 변수, 지역 변수)
지역 변수가 전역변수보다 더 높은 우선순위를 가지기 때문에, 함수를 실행하면 함수 안에서 실행된console.log(name)
에 name부분에 지역변수를 가져온다
Block 은 중괄호로 시작하고, 끝나는 단위이다.
1if (true) {2 // Block3}4for (;;) {5 // Block6}7
8{9 // Block10}
var vs let
1for (let i = 0; i < 5; i++) {2 console.log(i);3}4console.log("final i:", i); // => Error
1for (var i = 0; i < 5; i++) {2 console.log(i);3}4console.log("final i:", i); // => 5
..??
1function greetingSomeone(firstName) {2 var time = "night";3 if (time === "night") {4 var greeting = "Good Night";5 }6
7 return greeting + " " + firstName;8}9
10greetingSomeone("Steve"); // => Good Night Steve
var 키워드를 사용해 변수를 선언할 경우 if문 안에서 변수를 선언해도 함수단위의 스코프에 정의되게 된다.
즉 if 문 밖 || 함수 스코프 안에서 변수를 불러와도 에러가 나지 않는다.
만약 var 키워드를 let으로 바꾼다면 변수는 if문 안 Block Scope에 한정되어 있기 때문에 위와 같이 if문을 빠져나와 변수를 호출하면 에러가 난다.
var은 그냥 쓰지말자...
+const 키워드
Block Scope
를 따른다.window
Global Scope
에서 선언된 함수, var
키워드를 이용해 선언된 변수는 window
객체와 연결된다.
1let hi = "하이"; // window 객체에 연결되지 않음2var bye = "바이"; // window 객체에 연결 됨!3function hello() {4 console.log("헬로");5} // window 객체에 연결!!!
전역 범위에 너무 많은 변수를 선언하지 않도록 주의