study/Javascript

7_[기본]_함수, 변수, 클로저

스파이크12 2022. 5. 31. 08:30

○ javascript는 함수를 정의하는게 아니라 만드는 것

-> 객체를 만드는 것이기 때문에 다른 곳에 대입(전달)이 가능함

//1)
var add = new Function("a, b", "return a+b;");
document.write(add(3,4));
//2)
var add = function(a,b) {
    return a + b;
};
document.write(add(3,4));
//3)
function add(a,b) {
    return a + b;
}
document.write(add(3,4));

 

○ 함수의 매개변수는 데이터를 담는 그릇이 아니라 매개변수의 이름일 뿐임

-> 여러개의 매개변수를 전달해도 인자의 갯수와 상관없이 함수의 arguments배열에 전달됨

function add(a,b) {
alert(arguments.length);
alert(arguments[0]);
return a + b;
}

document.write(add(5,4,3,2,1));

 

○ 전역 변수, 지역 변수

- var를 생략하고 변수를 만들었을 때 전역객체인 window에 속성으로 붙음
a = 1; => window.a = 1;
- function{}외에 중괄호에서는 변수 영역을 나누지 않음 = 함수영역만 변수의 영역을 나눔

a = 1; //전역변수
var a = 5; //전역변수
function add() {
a = 2; //전역변수
var = 3; //지역변수
}
{ var = 4; } //전역변수

 

○ 클로저

특정함수(f1)안에 지역변수(var a)와 내부함수(f2)가 존재하고 특정함수가 
내부함수를 리턴하고 특정함수(f1)의 지역변수를 사용할 경우 내부함수(f2)를 클로저라고함
-> 지역변수(var a)의 생명주기는 함수가 종료될때 사라져야 하지만 
   클로저를 이용할 경우 지역변수의 생명주기가 늘어나게됨 

function f1(){
    var a = 1; //지역변수
    return function f2(){
    	return a;
	}
}
var f = f1();
var a = f();