2012-08-15 40 views
16

Possible Duplicate:
JavaScript: When should I use a semicolon after curly braces?Chúng ta có cần dấu chấm phẩy sau khi khai báo hàm không?

Một người nào đó đã thêm dấu chấm phẩy sau khi khai báo hàm, nhưng không có ai đó. Đây có phải là một thực hành tốt để thêm dấu chấm phẩy sau khi khai báo hàm?

function test(o) { 
} 

function test(o) { 
}; 
+3

Điều này có thể có liên quan: [nên một hàm var fil đa chức năng() {/ * Mã * /} nhận được dấu chấm phẩy] (http://stackoverflow.com/q/4515084/990877). Tóm lại: đóng bằng ';' khi khai báo hàm trong biểu thức gán (tức là 'var f = function() {}'). – PPvG

Trả lời

28

Một chức năng khai không cần (và không nên có) một dấu chấm phẩy sau nó:

function test(o) { 
} 

Tuy nhiên, nếu bạn viết một hàm như một tuyên bố , giống như khởi tạo biến dưới đây, sau đó báo cáo kết quả nên được chấm dứt bằng dấu chấm phẩy, giống như bất kỳ tuyên bố khác sẽ là:

var a = function test(o) { 
}; 
3

số

Bạn không cần dấu chấm phẩy khi xác định một chức năng như thế.

Tuy nhiên, nếu bạn định nghĩa một hàm như thế này:

var test = function (o) { 
} 

Đó không phải là thực sự cần thiết, nhưng bạn có thể muốn sử dụng chúng, đặc biệt là nếu bạn đặt các chức năng trên cùng một dòng.

Cách thứ nhất xác định một hàm, nhưng cách thứ hai gán một hàm cho một biến, và do đó là một câu lệnh. Hầu hết các câu lệnh được phân cách bằng dấu chấm phẩy. Các hàm xác định có thể được coi là một counterexample phổ biến, vì không có nhiều người sử dụng chúng.

2

phẩy và chức năng khai báo:

function test(o) { 
    // body 
} // semicolon no 

var test = function (o) { 
    // body 
}; // semicolon yes 

Xem JSLint để biết các câu hỏi về mã định dạng.

+0

Dấu chấm phẩy cũng không bắt buộc trong loại khai báo hàm thứ hai. Các mã sau khi nó chạy mà không có bất kỳ vấn đề. –

1

Đối với trình duyệt, điều đó không quan trọng. Đối với vấn đề ngữ nghĩa, nó chỉ quan trọng nếu bạn đang tạo mẫu một hàm hoặc sử dụng câu lệnh hàm.

function stuff(stuff) { 
    alert(stuff); 
} //don't need a semicolon 

Object.prototype.stuff = function(stuff) { 
    alert(stuff); 
}; //need a semicolon 
var stuff = function(stuff) { 
    alert(stuff); 
}; //need a semicolon 
0

Dấu chấm phẩy không bắt buộc khi xác định chức năng, nhưng đặt nó không phải là một sai lầm.

Một ngoại lệ mặc dù, nếu bạn sử dụng giấy gói chức năng và vượt qua các thông số, bạn cần để thêm dấu chấm phẩy ở giữa, ví dụ:

(function(v){alert(v)})('1'); 
(function(s){alert(s)})('0') 

... Otherwise forget about them ...

6

Điều gì thực sự xảy ra lại là bạn đang thêm một câu lệnh trống sau hàm.

function test (o) { return o; }; 

có thể được xem là tương tự như:

var test = 0;; 

Đó dấu chấm phẩy thứ hai không phải là một lỗi mỗi-se. Trình duyệt xử lý nó như một tuyên bố hoàn toàn không có gì xảy ra.

Có hai điều cần ghi nhớ, tại đây.

này áp dụng CHỈ hoạt-tờ khai và kiểm soát khối (cho/nếu/khi/chuyển đổi/etc).

Chức năng-tờ khai cần được xác định ở dưới cùng của phạm vi của bạn, do đó bạn không chạy vào các vấn đề như thế này:

function test() {} 
(function (window, document, undefined) { /* do stuff */ }(window, document)); 

Bởi vì trình duyệt sẽ cho rằng bạn có ý nghĩa function test() {}(/*return value of closure*/); Đó là một lỗi. Một lỗi rất xấu và khó chịu, rất dễ bỏ qua.

Nhưng điều đó không sao, bởi vì các khai báo hàm có thể đi theo câu lệnh trả về và vẫn hoạt động tốt.

Vì vậy, ngay cả khi bạn muốn đi:

function doStuff() { 
    return (function() { /*process stuff*/ test(); }()); 
    function test() {} 
} 

Điều đó sẽ làm việc chỉ peachy.

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