2011-01-20 23 views
8

thể trùng lặp:
Does use of anonymous functions affect performance?Javascript: hiệu suất của var functionName = function() {} vs chức năng functionName() {}

tác động hiệu suất (nếu có) trên phân tích cú pháp là gì và thời gian chạy khi sử dụng biểu thức hàm vs khai báo trong Javascript?

var functionOne = function() { 
    // Some code 
} 

hay::

function functionTwo() { 
    // Some code 
} 

LƯU Ý:

Ví dụ, đặc tính hiệu suất và sự khác biệt trong hai cách sau đây là những gì Câu hỏi đặt ra không phải là về cho dù đó là nhanh hơn để khai báo chức năng nhưng về thực thi chức năng.

+0

Tôi không biết. Bạn nên thử nó theo kinh nghiệm nếu bạn thực sự quan tâm, nhưng tôi đoán là không có sự khác biệt. –

+3

Xem: [Việc sử dụng các hàm ẩn danh có ảnh hưởng đến hiệu năng không?] (Http://stackoverflow.com/questions/80802/does-use-of-anonymous-functions-affect-performance) (câu trả lời ngắn: nó phụ thuộc vào ngữ cảnh của cách diễn đạt). – Shog9

+0

Hãy xem jsPerf này: https://jsperf.com/anonymus-vs-declaration-vs-expression Tôi đã chạy trên Firefox 56, Chrome 62.0.3202 và IE 11 - trong tất cả các trường hợp khác biệt hiệu suất giữa các phương pháp tiếp cận là rất nhỏ. –

Trả lời

11

Quan trọng hơn nhiều so với hiệu suất khác nhau là ngữ nghĩa khác biệt giữa hai loại này.

  • Một chức năng tuyên bố với một tuyên bố khai báo hàm (mẫu thứ hai) có một cái tên mà sẽ hiển thị trong ngăn xếp dấu vết, vv
  • Chức năng báo cáo khai được "treo" lên đỉnh khối của họ và hiểu là nếu chúng thực sự xuất hiện ở đó, trước khi bất kỳ câu lệnh nào khác trong hàm chạy.

Sự khác biệt về hiệu suất có thể là rất nhỏ, thậm chí nếu có thể phát hiện được, ít nhất trong môi trường thời gian chạy hiện đại.

+0

Phải. Thời gian cần để * thực hiện * một khai báo hàm là nhỏ so với thời gian cần để biên dịch hàm ở vị trí đầu tiên (giả sử các hàm thực sự có một số mã trong chúng). –

+1

Tôi hiểu sự khác biệt ngữ nghĩa quan trọng hơn, nhưng tôi muốn biết liệu có bất kỳ tác động hiệu suất nào không. Điều này có nghĩa là quản lý bộ nhớ, phân bổ, v.v. bên trong javascript sẽ giống nhau bất kể hàm được khai báo như thế nào? – user148273

+0

Vâng, ngoại trừ những trường hợp kỳ lạ kỳ lạ mà ai đó có thể mơ ước, không có sự khác biệt về cách thức các chức năng đó hoạt động khi bạn đã gọi chúng; chúng cũng có chức năng thực sự. Có một tên là tốt đẹp vì tên hiển thị trong ngăn xếp dấu vết. Cú pháp cho phép một tên được cung cấp cho dù đó có phải là một câu lệnh định nghĩa thực sự hay không, nhưng các lỗi trình duyệt làm cho một điều không khôn ngoan để làm (điều đó là quá xấu). – Pointy

10

Đây là Liên kết JSPerf, thử kiểm tra trên nhiều trình duyệt, vì kết quả có xu hướng thay đổi. Trong chrome 10 tuyên bố chức năng có điểm số tốt hơn. http://jsperf.com/fn-expression-vs-statement

+1

+1 cho số thực. –

+0

Sự khác biệt là * miniscule * trong mọi trường hợp. Như tôi đã nhận xét về câu hỏi, bối cảnh là những gì quan trọng: http://jsperf.com/fn-expression-vs-statement/3 – Shog9

+0

Ya, người ta nên chọn bất cứ điều gì có vẻ hấp dẫn và dễ đọc hơn. –

Các vấn đề liên quan