2016-06-18 2 views
-1

Так у меня есть функция, какПочему func undefined в этом контексте?

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 => 
     { 
      // ... 
     }); 
} 

и мой браузер жалуется на линии

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

говоря, что func является undefined. Любая идея почему? Как я могу исправить?

+0

Что такое 'FUNC() \ п {...}' точно? Это вызов функции, за которым следует блок? Если 'func() {...}' - определение объектного метода, то 'func' является' undefined', потому что объектные методы не создают привязки для себя в локальной области. –

ответ

3

Вы не можете определить функцию так, как вы ее разместили.

Однако, вы можете, например, использовать function ключевое слово, чтобы определить свою функцию:

function func() { 
    ... 
} 

func(); // it works! 

Edit: По вашему комментарию, это объявление метода объекта. Чтобы выполнить эту работу, вам сначала нужно убедиться, что ваш браузер поддерживает эту особенность ES2015, а если нет, вы переводите ее на действительный ES5.

Тогда вы должны быть в состоянии получить доступ к функции с помощью this.func():

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

В случае, если вы используете func() например в качестве обратного вызова для события DOM, вы также должны убедиться, что this правильно связаны в func, например, явно связывая его в конструкторе:

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, а затем запустить блок кода { ... }

Смежные вопросы