오늘 공부한 내용 요약
( 모던 JavaScript 튜토리얼 학습 )
var는 초기 자바스크립트 구현 방식 때문에 let과 const로 선언한 변수와는 다른 방식으로 동작합니다
if (true) {
var test = true; // 'let' 대신 'var'를 사용했습니다.
}
alert(test); // true
if 문이 끝났어도 변수에 여전히 접근할 수 있다.
var 이 아닌 let 이였다면 오류발생
function sayHi() {
if (true) {
var phrase = "Hello";
}
alert(phrase); // 제대로 출력됩니다.
}
sayHi();
alert(phrase); // Error
var user = "Pete";
var user = "John";
alert(user); // John
function sayHi() {
phrase = "Hello";
alert(phrase);
var phrase;
}
sayHi();
------위와 아래는 같음--------
function sayHi() {
var phrase;
phrase = "Hello";
alert(phrase);
}
sayHi();
function sayHi() {
alert(phrase);
var phrase = "Hello";
}
sayHi(); --> 선언과 할당이 동시에 일어남 / 아래와 같이 동작
--------------------------
function sayHi() {
var phrase; // 선언은 함수 시작 시 처리됩니다.
alert(phrase); // undefined
phrase = "Hello"; // 할당은 실행 흐름이 해당 코드에 도달했을 때 처리됩니다.
}
sayHi();
이처럼 모든 var 선언은 함수 시작 시 처리되기 때문에, var로 선언한 변수는 어디서든 참조할 수 있습니다
(function() {
let message = "Hello";
alert(message); // Hello
})(); -> 함수 표현식이 만들어지고 바로 호출되서 실행되는 구조
function을 괄호로 감싸지 않으면 에러 발생
function() { // <-- Error: Function statements require a function name
let message = "Hello";
alert(message); // Hello
}();
함수 이름을 넣더라도 괄호로 function을 감싸지 않으면 에러
function go() {
}();
괄호를 사용하지 않아도 함수 표현식으로 인식하게 하려면 IIFE를 만들면 됨
(function() {
alert("함수를 괄호로 둘러싸기");
})();
(function() {
alert("전체를 괄호로 둘러싸기");
}());
!function() {
alert("표현식 앞에 비트 NOT 연산자 붙이기");
}();
+function() {
alert("표현식 앞에 단항 덧셈 연산자 붙이기");
}();
전역객체를 사용하면 어디서나 사용할 수 있는 변수나 함수를 만들수 있음
브라우저 환경에서는 window를 사용, 보편적으로 globalThis 사용
globalThis는 제안 목록에 추가 된 지 얼마 안 된 기능이기 때문에,
비 크로미움 기반 브라우저에선 지원하지 않습니다
전역 객체의 프로퍼티는 직접 접근할 수 있음
alert("Hello");
window.alert("Hello");
2개 동일한 결과
window.currentUser = {
name: "John"
};
alert(currentUser.name); // John
지역 변수 'currentUser'가 있다면
// 지역 변수와 충돌 없이 전역 객체 window에서 이를 명시적으로 가져올 수 있음
alert(window.currentUser.name); // John
클로저
-> 외부 변수를 기억하고 이 외부변수에 접근할수 있는 함수
자바스크립트에서는 모든함수가 자연스럽게 클로저가 된다 (일부 언어에선 불가능 경우 있음)
자바스크립트의 함수는 숨김 프로퍼티인 [[Environment]]를 이용해 자신이 어디서 만들어졌는지를 기억합니다. 함수 본문에선 [[Environment]]를 사용해 외부 변수에 접근합니다.
함수가 선언될때 마다 클로저가 만들어지고 클로저는 함수가 생성되는 시점의 스코프의 모든 변수의 컬렉션이라고도 볼 수 있다
출처: https://mygumi.tistory.com/318 [마이구미의 HelloWorld]
공부사이트
위의 내용은 공부중 본인이 이해한 내용으로 몇몇 틀린 내용이 있을 수 있습니다.
회독중 발견시 수정하겠습니다