2016-06-18 7 views
-1

だから私はなぜfuncはこのコンテキストでは未定義ですか?

func() 
{ 
    const curVal = this.curVal; 
    const callAgain =() => { func(); }; 
    Axios.get('somecontroller/someaction') 
     .then(response => 
     { 
      const newVal = response.data.curVal; 
      if(curVal === newVal) 
       setTimeout(callAgain, 500); 
      else 
       // .... 
     }) 
     .catch(response => 
     { 
      // ... 
     }); 
} 

のような機能を持っており、私のブラウザがfuncundefinedだと言っライン

const callAgain =() => { func(); }; 

文句を言っています。どんな考え?どうすれば修正できますか?

+0

'funcは何であるコード{ ... }のブロックを実行しようとしていると考えて()\ nは{...}'正確に?関数呼び出しの後にブロックが続くのか? 'func(){...}'がオブジェクトメソッド定義である場合、 'func'は' undefined'です。オブジェクトメソッドはローカルスコープ内で自身のバインディングを作成しないからです。 –

答えて

3

あなたが投稿したとおりに機能を定義することはできません。

ただし、たとえば、あなたの関数を定義するfunctionキーワードを使用することができます。

function func() { 
    ... 
} 

func(); // it works! 

編集: あなたのコメントによると、これは、オブジェクトのメソッドの宣言です。この作業を行うには、ブラウザがこの特定のES2015機能をサポートしているかどうかを確認する必要があります。そうでない場合は、有効なES5に変更してください。

次にあなたがthis.func()を使用して機能にアクセスすることができるはずです:あなたはfunc()例えばを使用している場合は

const callAgain =() => { this.func(); }; 

DOMイベントのコールバックとして、あなたはまた、コンストラクタで明示的にそれを結合することによって、たとえば、thisfuncに正しくバインドされていることを確認する必要があります:

constructor() { 
    ... 

    this.func = this.func.bind(this); 
} 
+0

これらはReactクラスの関数です。https://facebook.github.io/react/docs/reusable-components.html –

+0

これが問題であれば、別のエラーはありませんか? –

+0

@ Ms.Corlib:これはクラスメソッド定義ですか?もしあれば 'this.func()'を使います。 –

1

次のいずれかを使用して関数を定義:

あなたはこのようにそれを定義
function func(){ ... } 

それとも...

var func = function(){ ... } 


func() { ... } 

JavaScriptは、あなたがfuncと呼ばれる既存の関数を実行し、その後

関連する問題