質問: "手裏剣") { return "相手に大ダメージを与えた!"; } return "相手にダメージを与えた!"; } console.log(attack("手裏剣")); ``` returnが2つあるのですが、一つ目のreturnで呼び出し元に返る気がするのですが、 どうして↑のようなコードになるのか、理屈を教えて頂けないでしょうか。
回答: ちょっと別の書き方をすると ``` function attack(item) { if (item === "手裏剣") { return "相手に大ダメージを与えた!"; } else { return "相手にダメージを与えた!"; } } ``` リターンが気になるなら ``` function attack(item) { var x = "相手にダメージを与えた!"; if (item === "手裏剣") { x = "相手に大ダメージを与えた!"; } return x; } ``` コードを減らすなら ``` function attack(item) { return (item === "手裏剣") ? "相手に大ダメージを与えた!" : "相手にダメージを与えた!"; } ``` 拡張性を考えるなら ``` function attack(item) { var msg = ["相手にダメージを与えた!","相手に大ダメージを与えた!"] var i; switch (item) { case "手裏剣": i = 1; break; default: i = 0; } return msg[i]; } ``` とまあ、同じ機能を実現するにもいろんな書き方がありまして。 で、今回の質問で提示されたコードは、条件によって return は一回しか実行されないことを見極めましょう。