2017-04-27 3 views
1

でシンプルなコールバックを実装し、次のコードは動作しませんなぜ私は理解していない:私はJSでコールバックを学ぶしようとしていますJS

function timer(){ 
    let count = 0; 
    return function(){ 
     function inc(){ 
      count++; 
     } 

     function getCount(){ 
      return count; 
     } 
    } 
} 

let t = timer(); 
t.inc(); 
t.inc(); 
t.inc(); 
console.log(t.getCount()); 
+0

'inc'と' getCount'は 'timer'によって返された関数のメンバではありません - ' timer'によって返された関数内の "private"関数です –

答えて

1

returnオブジェクトが誤ってdeclared.youこの

のように使用することができます
  1. オブジェクトで関数を使用しないで返す。
  2. incgetcountは、です。の機能は、戻り値のオブジェクトfunction.soでは返されません。

function timer() { 
 
    let count = 0; 
 
    return { 
 
    inc : function() { 
 
     count++; 
 
    }, 
 
    getCount : function() { 
 
     return count; 
 
    } 
 
    } 
 
} 
 

 
let t = timer(); 
 
t.inc(); 
 
t.inc(); 
 
t.inc(); 
 
console.log(t.getCount());

+1

'let'を使ってみる - 'function timer(){ let count = 0; return { inc(){ count ++; }、 getCount(){ 戻りカウント; } }; } '...または関数のtimer(){ let count = 0; return { inc:()=> count ++、 getCount:()=> count }; } ' –

+0

明確にするために、関数が単にreturn文に含まれている場合、関数はプライベートであり、関数を含む関数の外部で呼び出すことはできません。しかし、オブジェクト内の値として設定されている場合、それらを含む関数の外部で呼び出すことができます。それは正しいと思いますか? –

+0

@MarcPerryはい。あなたは完全に正しい。 – prasanth

0

あなたはタイマー機能は、関数を返しますが、それはここでは何も

を返さないの内側には、補正

function timer(){ 
 
    let count = 0; 
 
     return { 
 
     inc :function(){ 
 
      count++; 
 
     }, 
 

 
     getCount :function(){ 
 
      return count; 
 
     }} 
 
} 
 

 
let t = timer(); 
 
t.inc(); 
 
t.inc(); 
 
t.inc(); 
 
console.log(t.getCount());

ですので
関連する問題