Tôi biết điều này là ngớ ngẩn, nhưng có bất kỳ sự khác biệt giữa điều này:(...()) vs (...)() trong việc đóng cửa javascript
(function() {
var foo = 'bar';
})();
và điều này?
(function() {
var foo = 'bar';
}());
JSLint cho chúng ta biết để Move the invocation into the parens that contain the function
, nhưng tôi thấy không cần phải.
Chỉnh sửa: Câu trả lời quá tuyệt. ~function
, thay thế JSHint cùng với tùy chọn của jQuery cho (/***/)();
và giải thích của Crockford! Tôi nghĩ tôi sẽ chỉ nhận được một câu trả lời "chúng giống nhau".
Các bạn quyết định điều tốt nhất thông qua các cuộc bỏ phiếu và tôi đánh dấu vào nó.
Hai ví dụ này rất gần giống nhau nhưng phiên bản 'quả bóng con 'trả về kết quả bên ngoài tập hợp dấu ngoặc đơn đầu tiên trong khi phiên bản được Crockford phê duyệt trả về bên trong. Điều này hiếm khi có ý nghĩa nhưng đó là một sự khác biệt. – Okonomiyaki3000
@ Okonomiyaki3000 Nó không phải là một sự khác biệt, trừ khi bạn có ý nghĩa thay đổi nó (tức là, thêm nhiều thứ bên trong dấu ngoặc đơn). Trong thực tế, tôi giả sử 'foo = (/ *** /)();' và 'foo = (/ *** /());' có thể biên dịch thành cùng một bytecode. Xem xét cách '(a + b) + (c + d)' sẽ biên dịch thành 'a + (b + c) + d'. –
Có, 'foo = (/ *** /)();' và 'foo = (/ *** /());' giống nhau nhưng '(foo =/*** /)();' và '(foo =/*** /)();' thì không. Và, vâng, đây là hình ảnh. Có lẽ không bao giờ có một lý do rất tốt để làm điều này. – Okonomiyaki3000