Cách giải quyết lỗi "không phải là một hàm" trong JavaScript

Tôi viết JavaScript mà không có dấu chấm phẩy.

Và tôi thực sự thích điều đó. Theo ý kiến của tôi, ngôn ngữ sạch hơn.

Bạn có thể không thích điều đó, và điều đó có thể hiểu được. Nhưng đó là cách của nó.

Dấu chấm phẩy là tùy chọn. Chúng tôi không bắt buộc phải thêm chúng.

Tuy nhiên, đôi khi chúng ta phải chú ý. Đặc biệt, trong Node.js chúng tôi sử dụngrequire()để tải các mô-đun và tệp bên ngoài.

Điều này có thể gây ra, trong một số trường hợp, một lỗi như sau:

TypeError: require(...) is not a function

That’s a weird error, right?

Let’s look at how I got it.

I required a library, and then I had to run some code at the root level and I created an immediately-invoked async function:

const fs = require('fs')

(async () => { //… })()

JS does not see a semicolon after require(), and we start a line with a (, and JS thinks we’re trying to execute a function.

It consider require('fs') as the name of the function, which is something that could actually work if the module export returned a function.

But it’s not, so we get that ...is not a function error.

How do we fix it?

We must add a semicolon. Somewhere.

This would work:

const fs = require('fs')

;(async () => { //… })()

and also this would work:

const fs = require('fs');

(async () => { //… })()

It’s a little price we have to pay to avoid the use of semicolons everywhere.

Tip: top-level await is now a thing, you can use that instead of this structure, and it will prevent such errors.


More js tutorials: