2012-02-24 49 views
6

Giả sử bạn có 2 chức năng giống hệt nhau mà không trả về giá trịCó sự khác nhau giữa hàm có và không có câu lệnh trả về không?

function a() { 
    // do some interesting things 
} 

function b() { 
    // do the same interesting things 
    return; 
} 

Chức năng b rõ ràng là tiết hơn nhưng có bất kỳ sự khác biệt về chức năng giữa các?

+2

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

+2

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

+1

12.9 trong thông số kỹ thuật, đối với những người quan tâm. – davin

Trả lời

10

Không có sự khác biệt thực sự; cả hai sẽ trả về undefined.

Các hàm không có câu lệnh trả về sẽ trả lại undefined, như sẽ hoạt động với câu lệnh trống return.


Để khẳng định điều này cho chính mình, bạn có thể chạy mã này - FIDDLE:

​function a() { 
} 

function b() { 
    return; 
} 

var aResult = a(); 
var bResult = b(); 

alert(aResult === bResult); //alerts true 
1

Nói chung bạn đang trả lại một giá trị. Ví dụ:

function b() { 
    return 'hello'; 
} 

a = b(); 

console.log(a); 

Sẽ xuất "chào" cho bảng điều khiển của bạn.

3

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(); 
+3

Hoàn toàn chủ quan, nhưng tôi hoàn toàn không đồng ý. Tôi không nghĩ rằng nó làm cho mã dễ đọc hơn. Ngược lại, nó không cần thiết vì vậy nó chỉ phục vụ cho sự lộn xộn. 2c của tôi. Tôi giả sử mỗi người một mình. – davin

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