2015-08-19 2 views
0

Так вот от Eloquent Javascript. Я пытаюсь понять, почему обратная находка имеет "(" + history + "+ 5)" вместо "(история + 5)" ???Синтаксис конкатенации ярко выраженного синтаксиса JavaScript

Вот фрагмент кода:

function findSolution(target) { 
    function find(start, history) { 
    if (start == target) 
     return history; 
    else if (start > target) 
     return null; 
    else 
     return find(start + 5, "(" + history + " + 5)") || 
      find(start * 3, "(" + history + " * 3)"); 
    } 
    return find(1, "1"); 
} 

Результат:

console.log(findSolution(24));// → (((1 * 3) + 5) * 3) 
+3

'' (history + 5) "' - строковый литерал. Попробуй это; это не то, что вы хотите. – SLaks

+0

Похоже, вам нужен перерыв и пара свежих глаз по утрам, возможно: P Кроме того, добро пожаловать в StackOverflow! :) –

+0

Новый синтаксис интерполяции упрощает чтение: '\' ($ {history} + 5) \ '' – Thilo

ответ

0

Так разница между "(" + история + "+ 5)" и "(история + 5)" является

"(" + история + "+ 5)"

"(" --> String 
history -->Number 
"+5)" -->String 

Теперь, если объединить эти переменной с помощью + он будет работать как конкатенация так "(" + history + "+5)" даст вам (5 + 5) в виде строки

Но "(history + 5)" -->String будет как (история + 5), как история будет не переменная в настоящее время его строковый литерал

Надеюсь, он поможет

+0

Большое спасибо! Я все еще не уверен, почему, но я надеюсь что в конечном итоге я натолкнулся на объяснение в Eloquent JavaScript на этом ... есть ли определенный термин для этого? Идущий «+ history +» вместо строкового литерала? – Myang310

+1

Это называется _string concatenation_. –

+0

понять силу из " –

Смежные вопросы