728x90
반응형

자유변수

함수의 지역범위에서 정의되지 않은 변수

let hi = "안녕";
 (function(name){
     let word = hi + ", "+name;
     let greet = "반가워 :)";
     let say = word + '\n' + greet;
     alert(say);
})('철수');

//name, word, greet, say 지역변수
//hi 자유변수

 

 

내부함수

 함수 안에서 또 다른 함수를 선언하는 것

function outter(){
    function inner(){
        var title = 'javascript'; 
        alert(title);
    }
    inner();  //내부함수
}
outter();   //외부함수

 

 

클로저 함수

자유변수를 가지고 있는 함수

클로저(closure)는 내부함수가 외부함수의 맥락(context)에 접근할 수 있는 것을 가르킴

클로져함수는 참조하는 환경을 가진 함수 - 참조하는 환경을 가지고 외부로부터 닫혀있음

//함수 외부의 컨텍스트에 접근 X
let arr = []
for(var i = 0; i < 5; i++){
    arr[i] = function(){
        return i;
    }
}
for(let index in arr) {
    console.log(arr[index]());
}   //5 5 5 5 5

//함수가 외부의 컨텍스트에 접근 O
let arr = []
for(let i = 0; i < 5; i++){
    arr[i] = function(id) {
        return function(){
            return id;
        }
    }(i);
}
for(let index in arr) {
    console.log(arr[index]());
}    //0 1 2 3 4

 

반응형

'프로그래밍 > JavaScript' 카테고리의 다른 글

07.21(Window 객체, BOM, DOM )  (0) 2020.07.21
07.20(객체)  (0) 2020.07.20
07.16(함수)  (0) 2020.07.16
07.15(형변환)  (0) 2020.07.15
07.14(Array 메소드)  (0) 2020.07.14
복사했습니다!