호다닥

Day 5. argument / scope / hoisting / closure 본문

바닐라코딩

Day 5. argument / scope / hoisting / closure

3jun 2018. 5. 31. 22:03

99% 비율로 Bubbling 이 주로 쓰인다. 


Object와 Array의 차이점??

Object : 각 속성은 key와 value로 표현된다.

Array : key값이 없이 value만 나열되어 있다. (단, key 대신 index가 있다.)




indexOf(arr[i]) === -1 조건이 있어야 result 배열에서 중복되는 값들이 제외된다. 




arguments : 매개변수, 인자를 뜻한다.

자바스크립트의 키워드, 자바스크립트에 원래 있는 것 함수 내부에서 아무때나 쓸 수 있다.

function에 argument가 있으면 function의 인자정보를 담고 있는 개체이다.



상단의 arguments는 bar함수의 인자정보를 가지고 있고, 하단의 arguments는 log함수의 인자정보를 가지고 있다. 




log 함수의 인자로 1, 2, 3이 들어가 있다. 

a 값은 1, b의 값은 2, c의 값은 3, 나머지는 undefined이다. 인자를 선언만 하고 값을 주지 않으면 undefined이다.


arguments는 실제로 들어온 인자들에 대한 정보가 들어있다. 써있는 인자들과는 무관하다.( d, e, f 같은)



키 값은 0, 1, 2 인자값은 1, 2, 3이 들어있다.




arguments의 특징에는 몇 가지가 있다. 

arguments는 배열은 아니다. 따라서 



.isArray    →    배열인지 아닌지 확인해주는 메소드



arguments.length 는 undefined, null 과 같은 값을 주어도 count한다.




Q. ) array 와 같은 것들은 undefined, null과 같은 값을 주었을 때 length값이 어떻게 될까?




arguments는 index로 읽을 수 있다. 





arguments key값 : 0, 1, 2, 3, 4, 5

arguments의 value값 : 1, 2, 3, 4, 5


vanilla Utils 과제를 할 때 arguments를 사용해야 한다.



전역스코프와 로컬스코프는 엄연히 다른 것이다.


함수 선언식(declaration)으로 선언되면 해당 함수는 맨 위로 hoisting된다.


var a = 1; 에서


var a 는 변수 선언부로 hoisting된다.


즉 

var a = 1; 은



var a;

a = 1;


이런 식으로 구동이 된다.


hoisitng은 current scope 내부에서만 된다.


함수 표현식은 일반 변수와 같이 hoisting된다. 


함수 표현식을 쓰면 변수에 값을 할당해야만 사용이 가능하기 때문에 생각해야할 것이 많아진다. 따라서 함수 선언식으로 쓰는 것이 낫다. 



실행 순서 : 

3번째 줄 코드 : 변수 a가 선언되고 값으로 1이 할당된다. 

5번째 줄 코드 : foo 함수가 생성된다. 

12번째 줄 코드 : foo함수가 실행된다.

5번째 줄 코드 : 2번에서 생성된 foo함수로 이동하여 foo함수에서 변수 b를 선언하고 2를 값으로 할당하고 console.log(a)와 (b)를 호출한다. 

13번째 줄 코드 : console.log(b)는 호출되지 않는다. (b는 foo함수 내부 스코프에서 선언되었기 때문에 그 외부 스코프에서는 b를 호출할 수 없다.)














'바닐라코딩' 카테고리의 다른 글

Day7. this, prototype  (0) 2018.06.05
Day 6. Closure  (0) 2018.06.02
Day3, 4. Event  (0) 2018.05.29
Koans  (0) 2018.05.28
Day2.DOM API  (0) 2018.05.24
Comments