Adam là chính xác; cả hai hàm trả về không xác định, và một trong hai cách là hoàn toàn tốt nếu bạn không quan tâm đến giá trị trả lại (hoặc mong muốn giá trị không được xác định). Tuy nhiên, nó thường tốt hơn trong các chương trình phức tạp hơn để trả về một cách rõ ràng từ một hàm, đặc biệt là vì các chương trình Javascript thường có các cơ chế gọi lại phức tạp. Ví dụ, trong đoạn mã này (chỉ phức tạp hơn một chút so với mã của bạn) Tôi tin rằng câu trả lời thực sự giúp làm rõ mã:
function someAsyncFunction(someVar, callback) {
// do something, and then...
callback(someVar);
// will return undefined
return;
}
function c(){
var someState = null;
if (some condition) {
return someAsyncFunction(some variable, function() {
return "from the callback but not the function";
});
// we've passed the thread of execution to someAsyncFunction
// and explicitly returned from function c. If this line
// contained code, it would not be executed.
} else if (some other condition) {
someState = "some other condition satisfied";
} else {
someState = "no condition satisfied";
}
// Note that if you didn't return explicitly after calling
// someAsyncFunction you would end up calling doSomethingWith(null)
// here. There are obviously ways you could avoid this problem by
// structuring your code differently, but explicit returns really help
// avoid silly mistakes like this which can creep into complex programs.
doSomethingWith(someState);
return;
}
// Note that we don't care about the return value.
c();
Câu trả lời hay cho điều này nên bao gồm một liên kết đến phần liên quan của ECMA spec. – georg
trả lại; về cơ bản có nghĩa là chức năng chấm dứt ở đây. Vì vậy, nếu bạn có nó như là bit cuối cùng của chức năng của bạn nó không làm bất cứ điều gì hữu ích. – gintas
12.9 trong thông số kỹ thuật, đối với những người quan tâm. – davin