Javascript

  • Function ํƒ€์ž…

    • ํ•จ์ˆ˜๋Š” ๊ฐ์ฒด์ด๋‹ค.
    • ์˜ค๋ฒ„๋กœ๋”ฉ์€ ์—†๋‹ค.
    • ๋งˆ์ง€๋ง‰์— ์ •์˜ํ•œ ํ•จ์ˆ˜๊ฐ€ ์ด์ „์— ์ •์˜ํ•œ ํ•จ์ˆ˜๋ฅผ ๋ฎ์–ด์”€์„ ์‰ฝ๊ฒŒ ์ดํ•ด ํ•  ์ˆ˜ ์žˆ๋‹ค.

    {% highlight javascript %} function addSomeNumber(num){ // 1๋ฒˆ return num + 100; } function addSomeNumber(num){ // 2๋ฒˆ return num + 200; } var result = addSomeNumber(100); // 300 2๋ฒˆ ํ˜ธ์ถœ {% endhighlight %}

  • ํ•จ์ˆ˜ ์„ ์–ธ vs ํ•จ์ˆ˜ ํ‘œํ˜„์‹ (Hoisting)

    • ํ•จ์ˆ˜ ์„ ์–ธ์€ ์–ด๋–ค ์ฝ”๋“œ๋„ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ์ด๋ฏธ ๋ชจ๋“  EC์—์„œ ์ ‘๊ทผํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

    Hoisting์ด๋ž€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ์ฝ”๋“œ๋ฅผ ํ‰๊ฐ€ํ•  ๋•Œ ์ œ์ผ ๋จผ์ € ํ•จ์ˆ˜ ์„ ์–ธ์„ ์ฐพ์€ ๋‹ค์Œ ์ด๋“ค์„ ๋งจ ์œ„๋กœ ์˜ฌ๋ฆฌ๋Š” ๊ณผ์ •์„ ๋งํ•œ๋‹ค.

    • ํ•จ์ˆ˜ ํ‘œํ˜„์‹์€ ์ฝ”๋“œ ์‹คํ–‰์ด ํ•ด๋‹น ์ค„๊นŒ์ง€ ์ง„ํ–‰ํ•˜๊ธฐ ์ „์—๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

{% highlight javascript %} alert(sum(10,10)); function sum(num1,num2){ // ํ•จ์ˆ˜ ์„ ์–ธ return num1 + num2; } {% endhighlight %}

{% highlight javascript %} alert(sum(10,10)); // error ํ•จ์ˆ˜๊ฐ€ ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค. var sum = function (num1,num2){ // ํ•จ์ˆ˜ ํ‘œํ˜„์‹ return num1 + num2; } {% endhighlight %}

  • ๊ฐ’์ฒ˜๋Ÿผ ์“ฐ๋Š” ํ•จ์ˆ˜

{% highlight javascript %} // someFunction : ํ•จ์ˆ˜๋งค๊ฐœ๋ณ€์ˆ˜, someArgument : ์ฝœ๋ฐฑ ํ•จ์ˆ˜์— ๋„˜๊ธธ ๊ฐ’ function callSomeFunction(someFunction, someArgument){ return someFunction(someArgument); } {% endhighlight %}

{% highlight javascript %} function add10(num){ return num + 10; } var result = callSomeFunction(add10,10); alert(result); // 20

function getGreeting(name){ return โ€œHello โ€ + name; } var result2 = callSomeFunction(getGreeting,โ€œNESOYโ€); alert(result2); // Hello NESOY {% endhighlight %}

  • ํ•จ์ˆ˜์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ

    • ํ•จ์ˆ˜ ๋‚ด๋ถ€์—๋Š” argument, this ๊ฐ์ฒด๊ฐ€ ์กด์žฌ
    • argument์˜ property์— callee : ๊ฐ์ฒด์˜ ์†Œ์œ ์ž์ธ ํ•จ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ
    • caller , callee์„ ํ†ตํ•ด ํ•จ์ˆ˜์™€ ์ด๋ฆ„ ์‚ฌ์ด์˜ ์˜์กด์„ฑ์„ ์ œ๊ฑฐ

{% highlight javascript %} function factorial(num){ if ( num โ‡ 1){ return 1; } else { return num * argument.callee(num-1); } } {% endhighlight %}

  • ํ•จ์ˆ˜์˜ ํ”„๋กœํผํ‹ฐ์™€ Method

    • ๋ชจ๋“  ํ•จ์ˆ˜์— length, prototype์ด ์กด์žฌ
    • length : ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐฏ์ˆ˜
    • prototype : ๋ชจ๋“  ์ฐธ์กฐ ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ณณ
    • apply(), call() ํ•จ์ˆ˜ ์กด์žฌ

{% highlight javascript %} function sum(num1, num2){ return num1 + num2; } function callSum1(num1, num2){ return sum.apply(this, arguments); // arguments ๊ฐ์ฒด๋ฅผ ๋„˜๊ธด๋‹ค. } function callSum2(num1, num2){ //ํ•˜๋‚˜ ํ•˜๋‚˜ ๋„˜๊ฒจ์ฃผ์–ด์•ผ ํ•œ๋‹ค. return sum.call(this, num1, num2); } alert(callSum1(10,10)); // 10 alert(callSum2(10,10)); // 10

{% endhighlight %}

  • bind()๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด this๋ฅผ ๊ต์ฒด ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋‚ด์žฅ๋œ ์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด

    • encodeURI(), encodeURIComponent()๋Š” ๋ธŒ๋ผ์šฐ์ €์— ์ „๋‹ฌํ•  URI๋ฅผ ์ธ์ฝ”๋“œํ•˜๋Š” ๋ฉ”์„œ๋“œ

    • ์œ ํšจํ•œ URI๋Š” ๊ณต๋ฐฑ๋ฌธ์ž ๋“ฑ์˜ ์ผ๋ถ€ ํŠน์ˆ˜ ๋ฌธ์ž๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์—†๋‹ค.

    • decodeURI(), decodeURIComponent()๋„ ์žˆ๋‹ค.

    ์ผ๋ฐ˜์ ์œผ๋กœ ๋งํ•ด ๋ฒ ์ด์Šค URI๋’ค์— ์ถ”๊ฐ€ํ•  ์ฟผ๋ฆฌ์ŠคํŠธ๋ง์„ ์ธ์ฝ”๋“œํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์œผ๋ฏ€๋กœ encodeURIComponent()๋ฅผ ํ›จ์”ฌ ์ž์ฃผ ์“ฐ๊ฒŒ ๋œ๋‹ค.

    • eval() : ๋ฌธ์ž์—ด์„ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‹คํ–‰ํ•œ๋‹ค.
  • Math ๊ฐ์ฒด

    • min(), max()
    • random()

์ฐธ์กฐ

http://insanehong.kr/post/javascript-function/