收到TypeError:r不是函数

时间:2019-08-20 20:59:27

标签: ecmascript-6

我收到突出显示callback(result);的以下错误:

未捕获的TypeError:r不是Image.onload(webp-support.js:6)的函数

导出文件(webp-support.js):

export default (callback) => {
    let img = new Image();

    img.onload = _ => {
        let result = (img.width > 0) && (img.height > 0);
        callback(result);
    }
    img.onerror = _ => {
        callback(false);
    }

    img.src = "data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA";
}

导入文件:

import webpSupport from './webp-support';

webpSupport(console.log('hello'));

1 个答案:

答案 0 :(得分:1)

问题出在这一行:

webpSupport(console.log('hello'));

如果我们将其分解,您将看到问题:

let supportedCallback = console.log('hello');
webpSupport(supportedCallback);

那显然是行不通的。它执行console.log,然后将其结果(始终为undefined)分配为webpSupport函数中的回调。显然,您不想要那样。您需要传递一个本身调用console.log的函数:

webpSupport(() => console.log('webp supported'));

hello相比,我也更愿意记录更有用的消息!如果您不熟悉它,则() => ...语法是Javascript的较短函数语法,称为arrow function