본문 바로가기

Web Dev

JavaScript : 함수는 값이다 ? 잉?

반응형

C# 기반의 개발 및 공부만 해온 나에게는 너무 신선한 충격이다. 

강의를 들으면서도 계속 이게 된다고? 

생각하면서 코드를 쳐 놓고도 들여다 보기를 반복하고 있다. 

그리고 이 부분이 자바스크립트 언어 만의 강력한 장점이 될 수 있겠다는 생각이 들었다,

함수를 객체화 할 수 있는건 다른 언어에서도 가능하지만 변수 안에 넣을 수 있는 값으로 

인식을 하니 활용 범위가 무궁무진해진 느낌이다.

그냥 간단한 예제 위주로 작성해 보았다,

 

이렇게 선언한 변수 안에 바로 익명 함수를 작성할 수 있다. 

자바스크립트에서는 다른언어에서는 딕션너리라고 명칭하는 문법을 객체라고 하던데 

함수가 값으로서 기능을 하다 보니 이미지와 같이 키값 안에 함수를 바로 작성할 수 있다.

만든 함수의 인자로 함수를 받을 수도 있고 함수 안에 변수로 딕셔너리를 만들어 원하는 값을 줄줄이 출력이 가능하다.

<!DOCTYPE html>
<html>
<head>
	<title></title>
</head>
<body>
<script type="text/javascript">
	var i = 5;
	function a(){
		var i = 10;
		b();
	}
	// 사용 될 때가 아닌 정의될 때의 전역 변수를 사용한다.  : 정적 유효 범위	(렉시컬 스코핑!)
	// 값으로서의 함수 : 자바스크립트에서는 함수도 객체이다. 함수도 일종의 값이다. 
	function b(){ 
		document.write(i);
	}
	a();

	var a =function() {
		// body...
	}
	// 자바스크립트에서 말하는 객체 안에 함수를 넣을 수 있다. 함수는 값이니까 
	a= {
		b:function(){

		} 
	}
	//값으로서의 함수 
	
	function cal(func,num) {
		func(num);
		// body...
	}
	function increase(num) {
		return num +1;
	}
	function decrease(num) {
		return num -1;
	}
	alert(cal(increase(),1));
	alert(cal(decrease(),1));

	function cal(mode){
		//객체
		var funcs = {
			'plus' : function(left,right){return left + right},
			'minus': function(left,right){return left - right}
		}
		return funcs[mode];
	}
	alert(cal('plus')(2,1));
	alert(cal('minus')(2,1)) ;

	var process = [
		function(input){return input + 10;}
		function(input){return input * input;}
		function(input){return input / 2;}
	];
	var input=1;
	for (var i =0; i<process.length; i++) {
		process[i](input);	
	}
	alert(input); 

</script>
</body>
</html>
반응형