Tại sao dấu ngoặc đơn được sử dụng để ngắt lệnh gọi hàm javascript?

Toán tử nhóm

const a = 1;
const b = 2;
const c = 3;

// default precedence
a + b * c; // 7
// evaluated by default like this
a + (b * c); // 7

// now overriding precedence
// addition before multiplication
(a + b) * c; // 9

// which is equivalent to
a * c + b * c; // 9
2 kiểm soát mức độ ưu tiên của việc đánh giá trong các biểu thức. Nó cũng hoạt động như một thùng chứa cho các biểu thức tùy ý trong một số cấu trúc cú pháp nhất định, nếu không sẽ xảy ra sự mơ hồ hoặc lỗi cú pháp

(expression)

const a = 1;
const b = 2;
const c = 3;

// default precedence
a + b * c; // 7
// evaluated by default like this
a + (b * c); // 7

// now overriding precedence
// addition before multiplication
(a + b) * c; // 9

// which is equivalent to
a * c + b * c; // 9
3

Bất kỳ biểu thức nào được đánh giá, bao gồm các biểu thức được nối bằng dấu phẩy

Toán tử nhóm bao gồm một cặp dấu ngoặc đơn xung quanh một biểu thức nhóm các nội dung. Toán tử ghi đè mức độ ưu tiên của toán tử bình thường, do đó, các toán tử có mức độ ưu tiên thấp hơn (thấp bằng toán tử dấu phẩy) có thể được đánh giá trước toán tử có mức độ ưu tiên cao hơn

Đánh giá phép cộng và phép trừ trước khi nhân và chia

const a = 1;
const b = 2;
const c = 3;

// default precedence
a + b * c; // 7
// evaluated by default like this
a + (b * c); // 7

// now overriding precedence
// addition before multiplication
(a + b) * c; // 9

// which is equivalent to
a * c + b * c; // 9

Lưu ý trong các ví dụ này rằng thứ tự mà các toán tử đánh giá đã thay đổi, nhưng thứ tự mà các toán hạng đánh giá thì không. Ví dụ: trong mã này, các lời gọi hàm

const a = 1;
const b = 2;
const c = 3;

// default precedence
a + b * c; // 7
// evaluated by default like this
a + (b * c); // 7

// now overriding precedence
// addition before multiplication
(a + b) * c; // 9

// which is equivalent to
a * c + b * c; // 9
4,
const a = 1;
const b = 2;
const c = 3;

// default precedence
a + b * c; // 7
// evaluated by default like this
a + (b * c); // 7

// now overriding precedence
// addition before multiplication
(a + b) * c; // 9

// which is equivalent to
a * c + b * c; // 9
5 và
const a = 1;
const b = 2;
const c = 3;

// default precedence
a + b * c; // 7
// evaluated by default like this
a + (b * c); // 7

// now overriding precedence
// addition before multiplication
(a + b) * c; // 9

// which is equivalent to
a * c + b * c; // 9
6 được đánh giá từ trái sang phải (thứ tự đánh giá thông thường) trước khi thứ tự toán tử được xem xét

a() * (b() + c());

Hàm

const a = 1;
const b = 2;
const c = 3;

// default precedence
a + b * c; // 7
// evaluated by default like this
a + (b * c); // 7

// now overriding precedence
// addition before multiplication
(a + b) * c; // 9

// which is equivalent to
a * c + b * c; // 9
7 sẽ được gọi trước hàm
const a = 1;
const b = 2;
const c = 3;

// default precedence
a + b * c; // 7
// evaluated by default like this
a + (b * c); // 7

// now overriding precedence
// addition before multiplication
(a + b) * c; // 9

// which is equivalent to
a * c + b * c; // 9
8, hàm này sẽ được gọi trước hàm
const a = 1;
const b = 2;
const c = 3;

// default precedence
a + b * c; // 7
// evaluated by default like this
a + (b * c); // 7

// now overriding precedence
// addition before multiplication
(a + b) * c; // 9

// which is equivalent to
a * c + b * c; // 9
9. Để biết thêm về quyền ưu tiên của nhà điều hành, hãy xem trang tham khảo của nó

Một câu lệnh biểu thức không thể bắt đầu bằng từ khóa

a() * (b() + c());
0, bởi vì trình phân tích cú pháp sẽ xem đó là phần bắt đầu của một khai báo hàm. Điều này có nghĩa là cú pháp IIFE sau không hợp lệ

function () {
  // code
}();

Toán tử nhóm có thể được sử dụng để loại bỏ sự mơ hồ này, vì khi trình phân tích cú pháp nhìn thấy dấu ngoặc đơn bên trái, nó biết rằng những gì theo sau phải là một biểu thức thay vì một khai báo

(function () {
  // code
})();

Bạn cũng có thể sử dụng toán tử để loại bỏ sự mơ hồ

Trong phần thân ngắn gọn của hàm mũi tên (phần trả về trực tiếp một biểu thức không có từ khóa

a() * (b() + c());
2), toán tử nhóm có thể được sử dụng để trả về một biểu thức chữ đối tượng, vì nếu không thì dấu ngoặc nhọn bên trái sẽ được hiểu là phần bắt đầu của phần thân hàm

const f = () => ({ a: 1 });

Nếu một thuộc tính được truy cập trên một số bằng chữ, thì dấu chấm của trình truy cập thuộc tính

a() * (b() + c());
3 có thể không rõ ràng với dấu thập phân, trừ khi số đó đã có dấu thập phân. Bạn có thể bọc các số nguyên trong ngoặc đơn để loại bỏ sự mơ hồ này

(1).toString(); // "1"

Toán tử nhóm có thể giảm thiểu (ASI) cạm bẫy. Ví dụ: từ khóa

a() * (b() + c());
2 và biểu thức được trả về không được có dấu ngắt dòng ở giữa

function sum(a, b) {
  return
    a + b;
}

Mã này sẽ trả về

a() * (b() + c());
5, vì dấu chấm phẩy được chèn trực tiếp sau từ khóa
a() * (b() + c());
2, khiến hàm trả về ngay lập tức mà không đánh giá
a() * (b() + c());
7. Trong trường hợp biểu thức được trả về dài và bạn muốn giữ cho nó có định dạng phù hợp, bạn có thể sử dụng toán tử nhóm để biểu thị rằng từ khóa
a() * (b() + c());
2 được theo sau bởi một biểu thức và ngăn chặn việc chèn dấu chấm phẩy

function sum(a, b) {
  return (
    a + b
  );
}

Tuy nhiên, việc phân nhóm cũng có thể gây ra các mối nguy ASI. Khi một dòng bắt đầu bằng dấu ngoặc đơn trái và dòng trước đó kết thúc bằng một biểu thức, trình phân tích cú pháp sẽ không chèn dấu chấm phẩy trước dấu ngắt dòng, bởi vì dấu chấm phẩy có thể ở giữa một lệnh gọi hàm. Ví dụ

const a = 1
(1).toString()

Mã này sẽ được phân tích thành

const a = 1;
const b = 2;
const c = 3;

// default precedence
a + b * c; // 7
// evaluated by default like this
a + (b * c); // 7

// now overriding precedence
// addition before multiplication
(a + b) * c; // 9

// which is equivalent to
a * c + b * c; // 9
0

Cái nào ném "TypeError. 1 không phải là một chức năng". Nếu kiểu viết mã của bạn không sử dụng dấu chấm phẩy, hãy nhớ rằng khi một dòng bắt đầu bằng dấu ngoặc đơn bên trái, hãy thêm dấu chấm phẩy vào trước dòng đó. Phương pháp này được khuyến nghị bởi một số trình định dạng và/hoặc hướng dẫn kiểu, bao gồm và

Việc sử dụng () trong JavaScript là gì?

Cú pháp hàm JavaScript . (tham số1, tham số2,. ) Tham số chức năng được liệt kê bên trong dấu ngoặc đơn () trong định nghĩa chức năng. Đối số của hàm là các giá trị mà hàm nhận được khi được gọi .

Điều gì xảy ra khi bạn gọi một hàm không có dấu ngoặc đơn?

Khi chúng ta gọi một hàm có dấu ngoặc đơn, hàm sẽ được thực thi và trả về kết quả cho hàm có thể gọi được. Trong một trường hợp khác, khi chúng ta gọi một hàm không có dấu ngoặc đơn, tham chiếu hàm được gửi đến hàm có thể gọi được thay vì thực thi chính hàm đó .

Sự khác biệt giữa gọi hàm có dấu ngoặc đơn và không có trong JavaScript là gì?

Với dấu ngoặc đơn, phương thức được gọi vì dấu ngoặc đơn, kết quả của lời gọi đó sẽ được lưu trữ trong before_add. Không có dấu ngoặc đơn, bạn lưu trữ một tham chiếu (hoặc "con trỏ" nếu bạn muốn) đến hàm trong biến

Điều gì xảy ra trong dấu ngoặc đơn chức năng?

Dấu ngoặc đơn được sử dụng để đính kèm thông tin phụ hoặc thông tin bổ sung, chẳng hạn như nhận xét đi qua, ví dụ nhỏ hoặc bổ sung hoặc giải thích ngắn gọn . Người viết có thể chọn đặt thông tin bổ sung trong ngoặc đơn hoặc tắt văn bản bằng dấu gạch ngang hoặc dấu phẩy.