2016-11-10 5 views
3

Ich lese das Eloquent Javascript-Buch. Es ist eine Aufgabe, ein Dreieck, so zu bauen:Schleife ein Dreieck mit einer While-Schleife

# 
## 
### 
#### 
##### 
###### 
####### 

mit einer Schleife.

Ich habe es erfolgreich mit einer for-Schleife.

for (var result = "#"; result.length <=7; result = result + "#") 
console.log(result); 

Aber aus irgendeinem Grund kann ich es nicht mit einer while-Schleife tun.

var result = "#" 
while(result.length <=7){ 
console.log(result); 
result = result + "#"; 
} 
VM920:3 # 
VM920:3 ## 
VM920:3 ### 
VM920:3 #### 
VM920:3 ##### 
VM920:3 ###### 
VM920:3 ####### 
"########" 

Aus irgendeinem Grund bekomme ich diese zusätzliche Zeile am unteren Rand mit 8 # Symbole in Anführungszeichen verpackt. Warum passiert dies?

+0

Gibt es einen Code nach der while-Schleife? – RamenChef

+0

Gibt es eine Chance, dass Sie das direkt von der Browserkonsole aus ausführen? – Timo

+0

Da bei der letzten Überprüfung der Schleifenbedingung das Ergebnis eine Länge von 7 hat, gehst du nochmal durch die Schleife. – enhzflep

Antwort

3

Es ist das Ergebnis des endgültigen Ausdrucks in Ihrem Code. Geben Sie "5 + 5" in Ihre JS-Konsole ein und Sie erhalten ein Ergebnis. Wenn Sie "5 + 5" am Ende eines Skript setzen, gleiche Sache. Das ist, was passiert hier:

var result = "#" 
while(result.length <=7){ 
    console.log(result); 
    result = result + "#"; // <-- this is the last statement executed, so it is returned 
} 

Im Gegensatz dazu unten die letzte Anweisung eine Logging-Anweisung ist, die keinen Rückgabewert hat. Das Ergebnis des Skripts ist also undefined.

for (var result = "#"; result.length <=7; result = result + "#") 
    console.log(result); 

Sie können dies deutlicher sehen, wenn Sie so etwas wie dies versuchen:

for (var i=0; i < 5; i++) { 
    console.log(i); 
    i 
} 

Hier ist der letzte Ausdruck ist einfach i. Dieser Code druckt jede Zahl von 0 bis einschließlich 4 und druckt dann die 4 ein zweites Mal, da dies der endgültige Ausdruck ist.

0 
1 
2 
3 
4 <-- the final console.log() call 
4 <-- the final expression 
0

var result = "#" 
 
while(result.length <=7){ 
 
console.log(result); 
 
result = result + "#"; 
 
}

Der Code funktioniert gut.

0

Eigentlich Javascript-Benachrichtigungen benötigt, dass eine Funktion ihre Aufgabe abgeschlossen hat. Bei diesem Szenario versteht die Programmiersprache nicht als finished, sondern als has finished. Die Hauptsache ist, dass dies nicht nur für Javascript gilt, sondern auch für andere Sprachen. In einigen Sprachen wie C# nennen wir es mit der Methode Signatur zum Beispiel

public void ReturnNothind(){ 
    // Code... 
} 

Die Methode gibt void, wenn es benachrichtigen muss, dass sie es ist Geschäft abgeschlossen ist.

Im Falle von Javascript ist es nicht in Methodensignatur deklariert, aber es funktioniert nach dieser Philosophie.

Bei for loop wird undefined zurückgegeben. Auf der anderen Seite, für die while Schleife hat es die js-Engine durch Rückgabe des Werts der result Variable gemeldet.

Also, um das gleiche Ergebnis von der While-Schleife zu erhalten, können Sie wie folgt tun ...

function print(){var result = "#" 
while(result.length <=7){ 
console.log(result); 
result = result + "#"; 
}} 
print() 
0

Ich sehe zwei Lösungen für diese Aus irgendwelchen Gründen ziehe ich dieses

var newItem = ''; 
for (var number = 0; number < 7; number++){ 
    console.log(newItem = newItem + '#'); 
} 

Aber zweite ist beredter

for (var newItem = '#'; newItem.length < 7; newItem = newItem + '#') { 
    console.log(newItem); 
}