๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป/Javascript

(49) [JavaScript] 5์ผ JavaScript ๋‚ด์žฅ๊ฐ์ฒด

by ๋”ฐ๊ถˆ 2024. 4. 28.

 

 

 

 

Function ๊ฐ์ฒด
ํ•จ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ์ฒด.
Function() ์ƒ์„ฑ์ž๋Š” ์ƒˆ๋กœ์šด
Function ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋™์ ์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
Function() ์ƒ์„ฑ์ž๋กœ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค ๊ฒฝ์šฐ ๋ณด์•ˆ ๋ฌธ์ œ์™€ eval๊ณผ ๋น„์Šทํ•œ ์œ ์‚ฌ(๋œ ์‹ฌ๊ฐํ•œ) ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€
๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ์ „์—ญ ๋ฒ”์œ„์—์„œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ณ , ์ฝ”๋“œ๋ฅผ ์ตœ์†Œํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

Function ๊ฐ์ฒด

  1. apply() ์ฃผ์–ด์ง„ this ๊ฐ’๊ณผ ๋ฐฐ์—ด(๋˜๋Š” ์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด)๋กœ ์ œ๊ณต๋˜๋Š” arguments๋กœ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜ : thisArg : fun๋ฅผ ํ˜ธ์ถœํ•˜๋Š”๋ฐ ์ œ๊ณต๋  this์˜ ๊ฐ’์ด๋ฉฐ, ๋ฉ”์†Œ๋“œ๊ฐ€ ๋น„ ์—„๊ฒฉ ๋ชจ๋“œ ์ฝ”๋“œ๋‚ด์˜ ํ•จ์ˆ˜์ผ ๊ฒฝ์šฐ, null๊ณผ undefined๋Š” ์ „์—ญ ๊ฐ์ฒด๋กœ ๋Œ€์ฒด๋œ๋‹ค. 
  2. call() : ์ฃผ์–ด์ง„  this ๊ฐ’ ๋ฐ ๊ฐ๊ฐ ์ „๋‹ฌ๋œ ์ธ์ˆ˜์™€ ํ•จ๊ป˜ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. apply()๊ตฌ๋ฌธ๊ณผ ์œ ์‚ฌํ•˜๋ฉฐ, ์ฐจ์ด์ ์€ call์€ ํ•จ์ˆ˜์— ์ „๋‹ฌ๋œ ์ธ์ˆ˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ›๋Š”๋ฐ ๋น„ํ•ด, apply()๋Š” ์ธ์ˆ˜ ๋ฐฐ์—ด ํ•˜๋‚˜๋ฅผ ๋ฐ›๋Š”๋‹ค๋Š” ์ ์ด๋‹ค. 
</head>
<body>


	<h3>apply(),call()</h3>

	<script type="text/javascript">
	var sum = function (a,b,c) {
		return a+b+c;
	};
	
	var s; 
	
	// ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐฉ๋ฒ• -------------
	// 1) ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•จ์ˆ˜ ํ˜ธ์ถœ 
	s=sum(1,2,3);
	console.log(s);
	
	// 2) aplly() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ ํ•จ์ˆ˜ ํ˜ธ์ถœ
	// apply(thisArg[,argArray]) : ์ฃผ์–ด์ง„ this ๊ฐ’๊ณผ ๋ฐฐ์—ด๋กœ ์ œ๊ณตํ•˜๋Š” ์ธ์ˆ˜๋กœ ํ•จ์ˆ˜ ํ˜ธ์ถœ 
	s = sum.apply(null,[1,2,3]);
	console.log(s);
	
	// 3) call() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ ํ•จ์ˆ˜ ํ˜ธ์ถœ
	// call(thisArg[,agr1,arg2,...]): ์ฃผ์–ด์ง„ this ๊ฐ’๊ณผ ๊ฐ๊ฐ ์ „๋‹ฌ๋œ ์ธ์ˆ˜๋กœ ํ•จ์ˆ˜ ํ˜ธ์ถœ 
	s = sum.call(null,1,2,3);
	console.log(s);
	console.log('-----------------------')
	
	var m = Math.max(5,6,3,7,8,3);
	console.log(m);
	
	var nums=[5,6,3,7,8,3];
	m = Math.max(nums);
	console.log(m); // NaN
	
	m = Math.max.apply(null,nums);
	console.log(m);
	
	
	
	</script>

</body>
</html>

 

 

 

</head>
<body>

	<h3>apply(),call()</h3>
	
	<script type="text/javascript">
	var obj = {
		name : '์ด์ž๋ฐ”',
		sayName : function() {
			console.log(this.name); // this ํ•„์ˆ˜ 
		}
	};
	
	var obj2 = {
		name:'์Šคํ”„๋ง'
	};
	
	obj.sayName();
	
	 //call(thisArg[,agr1,arg2,...])
	 // thisArg : ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์ œ๊ณต๋  this 
	obj.sayName.call(null); // ์•„๋ฌด๊ฒƒ๋„ ์ถœ๋ ฅ๋˜์ง€ ์•Š๋Š”๋‹ค. this๊ฐ€ null ์ด๋ฏ€๋กœ ์•„๋ฌด๊ฒƒ๋„ ์ถœ๋ ฅ ์•ˆ๋จ
	
	obj.sayName.call(obj);
	
	obj.sayName.call(obj2); // ์Šคํ”„๋ง

	
	</script>

</body>
</html>

 

 

 

</head>
<body>
	<h3>apply(),call()</h3>

	<script type="text/javascript">
		function sub() {
			for (let i = 0; i < arguments.length; i++) {
				console.log(arguments[i]);
			}
		}
		sub(1, '์ž๋ฐ”', 2);
		console.log('------------------------');

		function sub2() {
			console.dir(arguments); // Arguments(3), ์œ ์‚ฌ๋ฐฐ์—ด
			console.dir([]); // Array(0) 
			//cnosole.log(arguments.join); 
			// join()์€ Array์˜ ํ•จ์ˆ˜ 
		}
		sub2(1, '์ž๋ฐ”', 2);
		
		//Array ๊ฐ์ฒด์˜ Join 
		function sub3(){
			console.log(Array.prototype.join.call(arguments));
		}
		
		sub3(1,'์ž๋ฐ”',2);
		
	</script>


</body>
</html>

 

</head>
<body>

	<h3>bind</h3>

	<script type="text/javascript">
	var obj = {
			name : '์ด์ž๋ฐ”',
			sayName : function () {
				console.log(this.name);
			}
	};
	
	var obj2={
		name : '์Šคํ”„๋ง'
	};
	
	//bind(thisArg[,arg1,arg2,arg3,...])
	// : ํ˜ธ์ถœํ•  ๋•Œ this๋ฅผ ์ œ๊ณต๋œ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๋Š” ์ƒˆ๋กœ์šด ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ฆ
	var fn = obj.sayName.bind(obj2);
	fn();
	
	
	
	</script>
</body>
</html>