2016-03-25 8 views
1
var universe = true; 
var string = 'hello ' + (() => { 
    if (universe = true) { 
     return 'universe'; 
    } else { 
     return 'world'; 
    } 
}); 

Warum gibt es nicht "Hallo Universum" zurück? Wie kann ich das erreichen? Ich versuche, eine Zeichenfolge dynamisch zu erstellen - mein spezifischer Anwendungsfall ist zum Erstellen von HTML.Wie an Zeichenfolge mit einer verketteten anonymen Funktion anhängen?

+0

Sie haben auch einen Fehler hier: 'if (Universum = true)' - das ist eine Zuweisungsanweisung. Du meinst wahrscheinlich 'universum === true' –

+0

Warum eine Funktion dafür verwenden? Ein bedingter Operator würde kürzer und einfacher erscheinen. Brauchst du aus irgendeinem Grund einen neuen Bereich? –

+1

Das riecht wie eine doppelte Frage. – 8protons

Antwort

1

Sie müssen anonyme Funktion aufzurufen:

var universe = true; 
var string = 'hello ' + (() => { 
    if (universe = true) { 
     return 'universe'; 
    } else { 
     return 'world'; 
    } 
})(); // <--- notice() here 
+0

Danke. Dies ist perfekt. –

2

Sie sind einfach verketten die Funktionsreferenz mit dem String, das wird Ergebnisse in Verketten der primitive Wert dieser Funktionsobjekt an die Zielzeichenfolge. In diesem Fall müssen Sie diese Funktion aufrufen, anstatt sie direkt zu verketten.

var universe = true; 
var string = 'hello ' + (() => { 
    if (universe == true) { 
     return 'universe'; 
    } else { 
     return 'world'; 
    } 
})(); 

Und eine sehr lesbare Version des Codes wäre,

var universe = true; 
var fetchResult =() => (universe) ? 'universe' : 'world'; 
var string = 'hello ' + fetchResult(); 

Beachten Sie auch, dass Sie Zuordnung ein Wert in sind if-Anweisung statt es zu vergleichen. Das wird, wenn die Anweisung true Block immer ausgewertet werden immer universe = true wird immer auf true ausgewertet.

+0

Ich empfehle, ** fett ** oder * kursiv * Text zu verwenden, um Betonung auszudrücken und 'Codeblöcke' für tatsächlichen Code zu lassen. –

+1

@FelixKling Ich hab mich daran gewöhnt. Will versuchen, es zu ändern. :) –

+0

Ich weiß zu schätzen, wie tief Sie gingen. Ich verstehe jetzt, dass ich am Ende noch einen Satz Klammern hinzufügen muss. Was bedeutet "primitiver Wert der Funktion"? –

1

prägnante Weise

var universe = true; 
var string = 'hello ' + (() => universe ? 'universe' : 'world')(); 
+0

Wozu dient in diesem Fall überhaupt eine Funktion? –

+0

@FelixKling Ich stimme dir zu, kein Punkt, es ist nur eine kürzere Version der OP-Funktion, * weniger Code - weniger Bugs *. OP hat einen Fehler in der 'if' Anweisung – isvforall

Verwandte Themen