Skip to content

Latest commit

Β 

History

History
148 lines (95 loc) Β· 3.65 KB

File metadata and controls

148 lines (95 loc) Β· 3.65 KB

ν™”μ‚΄ν‘œ ν•¨μˆ˜

// μΌλ°˜ν•¨μˆ˜
function add(a, b) {
  return a + b;
}

// ν™”μ‚΄ν‘œ ν•¨μˆ˜
(a,b) => { return a+b }  
  1. ν•¨μˆ˜ μ„ μ–Έλ¬Έ
// ν•¨μˆ˜ μ„ μ–Έλ¬Έ
function add1(x,y) {    
  return x+y;}
  1. ν•¨μˆ˜ ν‘œν˜„ 식 : λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜κ³ , ν•¨μˆ˜λ₯Ό λŒ€μž…ν•˜λŠ” 식을 λ§ν•©λ‹ˆλ‹€.
// ν™”μ‚΄ν‘œ ν•¨μˆ˜ X
var add1 = function(x,y) {    
  return x + y;}; 

// ν™”μ‚΄ν‘œ ν•¨μˆ˜ O
var add2 = (x,y) => { return x + y;} //function μ‚­μ œ    
var add3 = (x,y) => return x+y //ν•¨μˆ˜μ˜ λ‚΄μš©μ΄ return 밖에 μ—†λŠ” 경우

ν™”μ‚΄ν‘œ ν•¨μˆ˜μ˜ λ‹€μ–‘ν•œ ν‘œν˜„ 방법

// λ§€κ°œλ³€μˆ˜ μ§€μ • 방법
    () => { ... } // λ§€κ°œλ³€μˆ˜κ°€ 없을 경우
     x => { ... } // λ§€κ°œλ³€μˆ˜κ°€ ν•œ 개인 경우, μ†Œκ΄„ν˜Έλ₯Ό μƒλž΅ν•  수 μžˆλ‹€.
(x, y) => { ... } // λ§€κ°œλ³€μˆ˜κ°€ μ—¬λŸ¬ 개인 경우, μ†Œκ΄„ν˜Έλ₯Ό μƒλž΅ν•  수 μ—†λ‹€.

// ν•¨μˆ˜ λͺΈμ²΄ μ§€μ • 방법
x => { return x * x }  // single line block
x => x * x             // ν•¨μˆ˜ λͺΈμ²΄κ°€ ν•œμ€„μ˜ ꡬ문이라면 μ€‘κ΄„ν˜Έλ₯Ό μƒλž΅ν•  수 있으며 μ•”λ¬΅μ μœΌλ‘œ returnλœλ‹€. μœ„ ν‘œν˜„κ³Ό λ™μΌν•˜λ‹€.
           
// 호좜 방법
const pow = x => x * x;
console.log(pow(10)); // 100

ν•¨μˆ˜ν‘œν˜„μ‹μ€ function을 μ‚­μ œν•˜κ³ , ν™”μ‚΄ν‘œλ₯Ό ν‘œμ‹œν•˜λŠ” λ°©λ²•μœΌλ‘œ ν‘œκΈ°λ²•μ΄ λ³€κ²½λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ ν•¨μˆ˜μ˜ λ‚΄μš©μ΄ return 밖에 μ—†λŠ” 경우, x,yλ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ 받은 ν›„, μ€‘κ΄„ν˜Έ 없이 λ°”λ‘œ λ¦¬ν„΄ν•©λ‹ˆλ‹€.

this 의 μ—­ν• 

functionμ•ˆμ— μžˆλŠ” this와 ν™”μ‚΄ν‘œν•¨μˆ˜ μ•ˆμ—μžˆλŠ” thisλŠ” λ‹€λ₯Έ 역할을 ν•œλ‹€λŠ” 점이, 일반 ν•¨μˆ˜ν™” ν™”μ‚΄ν‘œ ν•¨μˆ˜μ˜ κ°€μž₯ 큰 차이점 μž…λ‹ˆλ‹€.

//functionμ•ˆμ— μžˆλŠ” this
var relationship1 = {    
  name : 'zero',    
  friends : ['nero','hero','xero'],    
  logFriends : function() {        
    var that = this; //thisλŠ” relationship1을 κ°€λ₯΄ν‚΄
    this.friends.forEach(function(friend){            
      console.log(that.name, friend);        
    });    
  },};

relationship1.logFriends();

ν•¨μˆ˜ 호좜 방식에 μ˜ν•΄ this에 바인딩할 μ–΄λ–€ 객체가 λ™μ μœΌλ‘œ κ²°μ •λ©λ‹ˆλ‹€. ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ ν•¨μˆ˜κ°€ μ–΄λ–»κ²Œ ν˜ΈμΆœλ˜μ—ˆλŠ”μ§€μ— 따라 this에 바인딩할 객체가 λ™μ μœΌλ‘œ κ²°μ •λœλ‹€.

: Functionμ—μ„œ this λŠ” μžμ‹ μ΄ μ†ν•΄μžˆλŠ” 객체이름을 λ§ν•©λ‹ˆλ‹€.

  • ν™”μ‚΄ν‘œ ν•¨μˆ˜ μ•ˆμ— μžˆλŠ” this
//ν™”μ‚΄ν‘œ ν•¨μˆ˜ μ•ˆμ— μžˆλŠ” this
var relationship1 = {    
  name : 'zero',  
  friends : ['nero','hero','xero'],    
  logFriends() {        
    this.friends.forEach(friend =>{        
      //λ°”λ‘œ 밖에 μžˆλŠ” this와 같은 κ²ƒμœΌλ‘œ λ§Œλ“€μ–΄ 쀌            
      console.log(this.name, friend);        
    });    
  },};

relationship1.logFriends();

ν™”μ‚΄ν‘œ ν•¨μˆ˜λŠ” ν•¨μˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ this에 바인딩할 객체가 μ •μ μœΌλ‘œ κ²°μ •λœλ‹€. λ™μ μœΌλ‘œ κ²°μ •λ˜λŠ” 일반 ν•¨μˆ˜μ™€λŠ” 달리 ν™”μ‚΄ν‘œ ν•¨μˆ˜μ˜ this μ–Έμ œλ‚˜ μƒμœ„ μŠ€μ½”ν”„μ˜ thisλ₯Ό 가리킨닀.


ν˜Έμ΄μŠ€νŒ…

λ³€μˆ˜λ‚˜ ν•¨μˆ˜μ˜ μ„ μ–Έλ§Œ λ§¨μœ„λ‘œ λŒμ–΄μ˜¬λ €μ§€λŠ” 상황.

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ νŠΉμ§•μ€‘ ν•˜λ‚˜.

x = 2

console.log(x) // 2

var x = 0

console.log(x) // 0

μ΄λŠ” ν˜Έμ΄μŠ€νŒ… λ•Œλ¬Έμ— λ‹€μŒκ³Ό 같이 μž‘λ™λœλ‹€.

var x;

x = 2

console.log(x); // 2

x = 0;

console.log(x) // 0

μ›λž˜λŠ” 였λ₯˜κ°€ λ‚˜λŠ” 상황인데도 μ—λŸ¬κ°€ λ‚˜μ§€ μ•ŠλŠ”λ‹€! κ·Έλ ‡κΈ° λ•Œλ¬Έμ— μ½”λ”©ν• λ•Œ 쑰심해야 ν•˜κ³ , varκ°€ μ•„λ‹Œ let, constλ₯Ό μ“°λ©΄ ν˜Έμ΄μŠ€νŒ…μ„ 막을 수 μžˆλ‹€.

x = 2

console.log(x); // x is not defined!! error

let x = 0