2016-05-05 47 views
5

Ho due funzioni dello stesso tipo di ritorno nello script java ma il tipo restituito è la differenza. Il utilizzando il codice di identificazione snipped sottoPerché è lo stesso tipo di ritorno ma il risultato è la differenza

function foo1() 
    { 
     return { 
      bar: "hello" 
     }; 
    } 

    function foo2() 
    { 
     return 
     { 
      bar: "hello" 
     }; 
    } 

chiamando la funzione ..

console.log("foo1 returns:"); 
console.log(foo1()); 
console.log("foo2 returns:"); 
console.log(foo2()); 

uscita il risultato ....

foo1 returns: 
Object {bar: "hello"} 
foo2 returns: 
undefined 
+0

è possibile fornire piena codice anziché piccola parte? – Darshit

+1

@Darshit Questo è il codice completo. –

+0

@Konst Si prega di non suggerire modifiche in codice del genere a meno che non si sia pienamente consapevoli di tutte le conseguenze: le modifiche apportate causeranno la scomparsa del problema. –

risposta

4

Il suo inserimento automatico del punto e virgola qui. Il resto del codice non viene mai raggiunto.

function foo2() 
{ 
    return // get a automatic semicolon insert here 
    { 
     bar: "hello" 
    }; 
} 

prega di dare un'occhiata: Warning: unreachable code after return statement

4

Questo perché JavaScript interpreta

return 
{ 
    bar: "hello" 
}; 

come return dichiarazione seguita da creazione del blocco (che viene ignorato in fase di esecuzione). Non come "restituire un oggetto". E davvero non so perché gli sviluppatori di JavaScript abbiano preso una tale decisione.

Comunque ASI inserisce ; dopo return conseguente codice equivalente:

return; 
{ 
    bar: "hello" 
}; 

La nuova riga dopo return è il colpevole. Non usarlo se desideri restituire qualcosa.

0

Un javascript gratuito che fai senza virgola ma mette un punto e virgola automatica, che è il motivo per cui si ottiene indefinito Refer this

function foo1() 
    { 
     return { 
      bar: "hello" 
     }; 
    } 

    function foo2() 
    { 
     return{ 
      bar: "hello" 
     }; 
    } 
    console.log("foo1 returns:"); 
    console.log(foo1()); 
    console.log("foo2 returns:"); 
    console.log(foo2());