Scope란 범위. 유효공간. 살 수 있는 공간. 허용공간. 허용범위 를 의미한다. 함수스코프란 함수에 의해서 생기는 범위. 자바스크립트에서 ES5에서는 함수에 의해서만 변수의 유효범위가 생길 수 있었다. ES6부터 블록스코프가 등장하였다. 블록이란? { }중괄호를 의미한다. { }에 의해서 변수의 유효범위가 결정된다. 라고 할 수 있다. { let a = 5 { let a = 10 console.log(a) } console.log(a) } console.log(a) 콘솔 값은 각각 10 , 5, undefined가 출력된다. (function () { var a = 5; (function () { var a = 10; console.log(a); })(); console.log(a); })(); co..
호이스트, hoist 명사 소형의 감아올리는 장치. 공장 내의 재료 운반·조립에 사용하며, 들보 위에서 이동시킴. 구동 방식에 따라 공기 호이스트·전기 호이스트 등으로 나누어짐 구글의 검색 결과는 올린다는 의미로 명시되어있다. 자바스크립트 내에서의 호이스팅 동작을 알아보자. console.log(a()); console.log(b()); console.log(d()); function a() { return 'h1'; } function b() { return 'h1'; } var d = function () { return 'd'; } 원래는 오류가 나야 하는 코드 일 것이다. 함수를 선언, 할당하기도 전에 console을 실행 하기 때문이다. 하지만 자바스크립트가 실제로 실행하는 코드 순서는 위와 좀..
https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Closures 클로저는 함수와 함수가 선언된 어휘적(lexical,정적) 환경의 조합이다. var name = 'zero'; function log(){ console.log(name); } function wrapper(){ var name = 'nero'; log(); } wrapper(); 위 코드를 참고하면 function log와 전역범위의 관계가 클로저 관계이다. 그래서 어떤 코드를 작성하더라도 클로저 관계가 형성될 수 밖에 없는 이유이다. for(var i = 0 ; i 2 }, 2 * 1000); }function 클로저(j){ //j 가 3 setTimeout(function(){ ..
ES6(ES2015) 이후 var는 더 이상 사용되지 않고 let과 const가 사용됩니다. 스코프 var x = 'moon'; function ex(){ var x = 'local'; x = 'change'; } ex(); alert(x); ex함수를 호출하면은 alert를 실행 하였을때 무엇이 호출 될까? alert(x); // moon이 호출된다. 함수안에 정의된 변수는 자신을 감싸고 있는 함수 바깥으로 빠져 나갈 수가 없다. 만약에 var을 뺀다면 어떻게 될까 var x = 'moon'; function ex(){ x = 'local'; x = 'change'; } ex(); alert(x); function 내에 변수가 존재하지 않는다면 x가 함수 바깥으로 나가서 var x를 찾게 된다. 그로 ..
블로킹이라고 정확하게 명시되어 있는 것은 존재하지 않는다고 한다. 느리게 동작하는 코드를 우리는 블로킹이라고 부른다. alert, console.log등 이 자체는 느리지 않는다. 하지만 while문의 루프 안에서 수십억번이 실행된다면 느릴것이다. 네트워크 요청이나 이미지 프로세싱은 느리다. (*이미지 스프라이트 기법이 사용되는 이유) 느린 동작이 스택에 남아있는 것을 보통 블로킹이라고 말한다. 자바스크립트는 싱글 스레드 프로그래밍 언어이다. 싱글 스레드는 네트워크 요청을 하고는 마냥 끝날때 까지 기다린다. 그것 말고는 방법이 없기 때문이다. 문제는 무엇이냐? 바로 웹 브라우저에서 코드가 실행되고 있기 때문이다. 동기적으로 실행되는 네트워크 요청이 콜 스택을 블로킹하여 브라우저는 다른 일들을 할 수가 없..