Return 1 Là Gì

function a() { return 1; }function b() { return(1); }Tôi đã kiểm tra mã trên trong bảng điều khiển của Chrome và cả hai đều trả về 1.

Bạn đang xem: Return 1 là gì

Bạn đang xem: Return 1 là gì

function c() { return "1"; }function d() { return("1"); }Tôi cũng đã kiểm tra đoạn mã ở trên và cả hai hàm đều trả về "1".

Vì vậy, sự khác biệt giữa sử dụng returnvà là return()gì?

PaulS. — luôn cảm thấy bối rối void(0)vì nó được cho là viết tắt cho không xác định . Vì vậy, nếu nó là tốc ký, tại sao lại bao gồm các ký tự không cần thiết? ;-) RobG Tôi nghĩ rằng đó là một carry-over từ Python và thực sự có thể hữu ích đối với trường hợp đặc biệt, nơi bạn muốn bao gồm các nhà khai thác void i = 1; // ReferenceErrorvsvoid (i = 1); // undefined Bạn có thể thích thú với câu hỏi này, đây là câu hỏi của bạn áp dụng cho C #: stackoverflow.com/questions/2186595/…

Giống như giữa

var i = 1 + 1;và

var i = (1 + 1);Đó là, không có gì. Dấu ngoặc đơn được phép vì chúng được phép trong bất kỳ biểu thức nào để ảnh hưởng đến thứ tự đánh giá, nhưng trong các ví dụ của bạn, chúng chỉ là thừa.

returnkhông phải là một hàm, mà là một câu lệnh . Nó tương tự về mặt cú pháp với các câu lệnh luồng điều khiển đơn giản khác như breakvà continuecũng không sử dụng dấu ngoặc đơn.

Một câu lệnh trả về có thể được theo sau bởi một biểu thức. Một giá trị trả về phải nằm trong một hàm, do đó, hàm trả về giá trị của biểu thức hoặc nếu không có giá trị đó, thì không xác định . Đây là một câu trả lời tuyệt vời với một ví dụ tuyệt vời, nhưng tôi nghĩ có thể đáng giá thêm rằng "return" không phải là một hàm vào câu trả lời chính - vì đó là gốc rễ của sự hiểu lầm dẫn đến câu hỏi này. BiscuitBaker: Tôi đã thêm một chút. Khi tôi jotted xuống trả lời ngắn gọn này, tôi đã không mong đợi nó để có được 50 upvotes ...

Không có sự khác biệt.

returnkhông phải là một lời gọi hàm, nhưng là một câu lệnh ngôn ngữ. Tất cả những gì bạn đang làm với dấu ngoặc đơn chỉ là nhóm giá trị trả về của bạn để nó có thể được đánh giá. Ví dụ, bạn có thể viết:

return (x == 0);Trong trường hợp này, bạn trả về giá trị của câu lệnh x == 0, giá trị này sẽ trả về giá trị boolean truehoặc falsetùy thuộc vào giá trị của x.

Việc đánh giá câu lệnh trả về không cần "phân nhóm". Vì vậy, trong mọi trường hợp sẽ có một trả về boolean.

Trên thực tế ở đây mức độ ưu tiên ()cao hơn nên nó đánh giá trước:

Ở đây, trước hết ("1")hãy đánh giá, theo cách sau:

return "1";Xem trực quan:


*

Vì vậy, về cơ bản không có sự khác biệt về chức năng nhưng cái thứ hai có thể hơi chậm một chút vì trước hết nó giải quyết các dấu ngoặc.

Tại sao bạn lại đưa ra một khẳng định hoàn toàn chưa được xác minh rằng "cái thứ hai có thể chậm hơn một chút" khi không phải như vậy?

Hoàn toàn không có sự khác biệt. Nếu bạn sẽ xem xét đặc tả JS (ECMAScript) của câu lệnh trả về . Trong số nhiều điều khác, nó đang nói với bạn:

return Biểu thức;

mà bạn có thể cung cấp biểu thức return. Biểu hiện được hello, Math.abs(x), yourCustomFunc(7), hoặc trong trường hợp thứ hai bạn này có thể 1hoặc (1). Biểu hiện 1sau khi đánh giá giống (1)và giống (((((1))))))hoặc thậm chí giống như một cái gì đó thực sự kỳ lạ như (+(!(+(!1)))).

Wolf Tôi đã không tìm thấy như vậy. Đây là một trang khác, nhưng cũng là một trang people.mozilla.org/~jorendorff/… Vâng, đáng buồn. Tôi cũng không thành công. Còn về việc mở rộng câu trích dẫn của bạn thành toàn bộ cú pháp của câu lệnh trả về?

Không có sự khác biệt, dấu ngoặc đơn là tùy chọn. Xem MSDN :

return;Đối số biểu thức tùy chọn là giá trị được trả về từ hàm. Nếu bị bỏ qua, hàm không trả về giá trị.

Xem thêm: Ý Nghĩa Của Sao Tấu Thư Ở Cung Tài Bạch, Luận Giải Ý Nghĩa Của Sao Tấu Thư

Chỉ MS mới nghĩ rằng việc tạo nhóm là "tùy chọn" trong câu lệnh trả về . Chúng là "tùy chọn" ở đó như trong bất kỳ biểu thức nào hoặc nhiều phần khác của ngữ pháp. RobG: Nhưng rõ ràng, chúng có nhiều khả năng được hỏi về trong một returntuyên bố hơn. : P MS có lẽ đã mệt mỏi với việc trả lời câu hỏi từ JS noobs. "Có một sự khác biệt cho người đọc." Vâng, đúng: Thông số MSDN ngụ ý sai về
điều đó return (expressionvà return expression)là hợp pháp.

returnlà một câu lệnh một từ khóa bắt đầu câu lệnh trả về , không phải là một hàm.

Như đã được đề cập, các dấu ngoặc đơn ảnh hưởng đến thứ tự đánh giá, nhưng không được sử dụng để "thực thi" hàm được đặt tên return. Đó là lý do tại sao các dòng này hoạt động mà không gặp bất kỳ sự cố nào:

return (1);var a = (1);Trên thực tế, chúng giống hệt với những dòng sau:

return 1;var a = 1;Lý do gây return()ra lỗi cú pháp là vì lý do chính xác mà dòng sau tạo ra lỗi (bao gồm câu lệnh trả về để so sánh):

return(); // SyntaxError: syntax errorvar a = (); // SyntaxError: syntax error — IQAndreas nguồn Và chỉ là một lưu ý phụ, nếu returnkhông bao gồm bất kỳ điều gì sau nó, nó giả sử bạn muốn quay lại undefined. — IQAndreas Wolf Các biểu thức là tùy chọn, vì vậy returnbản thân nó là một câu lệnh trả về. — Paul 6 Có sự khác biệt rất lớn đối với con người và không có sự khác biệt đối với công cụ Javascript.

return 1là câu lệnh khai báo rằng chúng ta cần thoát ngay khỏi hàm mang giá trị 1.

return(1)là câu lệnh tương tự được ngụy trang dưới dạng lệnh gọi hàm theo quy ước ngu ngốc rằng bạn không bắt buộc phải chèn khoảng trắng bên ngoài dấu ngoặc đơn trong Javascript. Nếu bạn sử dụng mã như thế này trong hệ thống sản xuất, bất kỳ người bảo trì nào sẽ đến văn phòng của bạn với tiền cọc và ngọn đuốc, sau khi dành một thời gian cố gắng quyết định xem bạn có thực sự có return()chức năng ở đâu đó trong codebase hay không hay chỉ không biết returntừ khóa dùng để làm gì.

Như nhiều người khác đã nói chính xác, dấu ngoặc đơn không có tác dụng gì ngoại trừ "nhóm" có nghĩa đen cho số được ưu tiên cao hơn 1.

— hijarian nguồn 3 "Có sự khác biệt rất lớn đối với con người" - Không phải những người có năng lực. "cùng một câu lệnh được ngụy trang dưới dạng lệnh gọi hàm" - không có returnchức năng nào . "quy ước ngu ngốc rằng bạn không bắt buộc phải chèn khoảng trắng bên ngoài dấu ngoặc đơn trong Javascript" - hầu như không có ngôn ngữ nào yêu cầu điều đó; gọi điều này là ngu ngốc. "bất kỳ người bảo trì nào sẽ đến văn phòng của bạn với cổ phần và ngọn đuốc" - không ai có thẩm quyền sẽ làm. return(1)là thực hành kém nhưng những người bực bội về những điều như vậy đang lãng phí tài nguyên và tạo ra bầu không khí xấu. — Jim Balter JimBalter "Những người không có thẩm quyền" - ha! "Hầu như không có ngôn ngữ nào yêu cầu điều đó" - đó là lý do tại sao tôi nói "quy ước". Nếu nó ngu ngốc, nó được gọi là "ngu ngốc". "Không có returnchức năng nào " - việc thông dịch viên cấm bạn đăng ký một chức năng với tên returnsẽ không giúp người đọc mã không đặt câu hỏi về sự tỉnh táo của mình trước tiên, vì vậy, mã này là lãng phí. return(1)không chỉ là "thực hành kém", là một dấu hiệu nguy hiểm của một người nào đó không biết mình đang làm gì! — hijarian 2 Vì vậy, bạn không biết "nghĩa vụ" nghĩa là gì, hoặc bạn đang thay đổi yêu cầu của mình ... bằng cách nào đó, tôi sẽ không lãng phí thời gian của tôi cho bạn nữa. — Jim Balter Tôi nghi ngờ sự troth của câu cuối cùng của bạn; returncó (trong tất cả các ngôn ngữ tôi biết có từ khóa này) được ưu tiên ít nhất. Vì vậy, nếu biểu thức tùy chọn có mặt, nó luôn được đánh giá đầu tiên. — Wolf 4

Trong câu lệnh return, các dấu ngoặc quanh biểu thức đã được tạo sẵn.

Trong JavaScript, cũng như nhiều ngôn ngữ khác (như C, C ++, Java, Python), câu lệnh trả về có hai phần: từ khóa returnvà biểu thức (tùy chọn). Vì vậy, trong bất kỳ trường hợp nào, tất cả những gì theo sau returntừ khóa trước tiên được đánh giá là một biểu thức , sau đó, câu lệnh trả về được "thực thi" bằng cách chuyển điều khiển trở lại trình gọi.

Việc sử dụng hay không sử dụng dấu ngoặc đơn là vấn đề về kiểu dáng , trong khi hầu hết các hướng dẫn kiểu đều cấm chúng đối với những trường hợp nhỏ nhặt như trường hợp được trích dẫn trong câu hỏi của bạn, vì nó khiến trả về trông giống một hàm.

Phụ lục sau

Nếu có dấu ngoặc đơn hoặc không có, đừng bao giờ quên đặt biểu thức tùy chọn phía sau return, nghĩa là, trong cùng một dòng. Các cạm bẫy thực với returntrong sự dối trá JavaScript trong việc thêm một ngắt dòng sau nó:

— chó sói nguồn 1

bằng cách thêm dấu ngoặc đơn, chúng tôi đã đảm bảo rằng javascript không chèn dấu chấm phẩy trước nhiều câu lệnh được viết sau khi trả về, để tham khảo: - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar #Automatic_semicolon_insertion

ví dụ :

return a + b;

được chuyển thành

return; a + b;

bởi ASI.

Bảng điều khiển sẽ cảnh báo "mã không thể truy cập được sau câu lệnh trả về". Để tránh vấn đề này (để ngăn chặn ASI), bạn có thể sử dụng dấu ngoặc đơn:

return ( a + b );mã được sao chép từ: - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/return

— Rahul Singh Bhadhoriya nguồn Điều này hoàn toàn chính xác và theo cách đó nó có ý nghĩa đối với các biểu thức phức tạp. Nhưng bạn nên thêm vào cùng một dòng hoặc ngay sau return trong câu đầu tiên để làm cho nó rõ ràng hơn. Tôi nghĩ rằng sự phản đối xuất phát từ việc hiểu sai về điều này. — Wolf Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookie và Chính sách bảo mật của chúng tôi. Licensed under cc by-sa 3.0 with attribution required. Chuyên mục: Kiến Thức