为什么func在这种情况下未定义?

时间:2016-06-18 01:01:35

标签: javascript ecmascript-6

所以我有一个像

这样的功能
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(); };

funcundefined。知道为什么吗?我该怎么办?

2 个答案:

答案 0 :(得分:3)

您无法按照发布的方式定义功能。

但是,您可以使用function关键字来定义您的功能:

function func() {
    ...
}

func(); // it works!

修改 根据您的评论,这是一个对象方法声明。为了使这项工作,您首先需要确保您的浏览器支持这个特定的ES2015功能,否则,您将其转换为有效的ES5。

然后您应该可以使用this.func()

访问该功能
 const callAgain = () => { this.func(); };

如果您使用func(),例如作为DOM事件的回调,您还必须确保在this中正确绑定func,例如通过在构造函数中显式绑定它:

constructor() {
    ...

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

答案 1 :(得分:1)

使用以下任一方法定义函数:

function func(){ ... }

或者...

var func = function(){ ... }

<小时/> 当你这样定义它时:

func() { ... }

JavaScript认为您正在尝试执行名为func的现有函数,然后运行代码块{ ... }