Ну, эта часть вызывает функцию, чтобы вернуться сразу, и так как он не возвращается ничего, вы получите undefined
:
var strFlip = function(str){
splitStr = str.split(" ");{
return; //<-- immediately returns here
}
...
};
Я не уверен, что эта часть пытается сделать, но на самом деле делать то, что вы хотите, вы можете сделать это:
var strFlip = function(str) {
//Since you are using a variable as a reference to a function
//expression/literal, there is no hoisting so you have to
//predefine
var wordFlip = function reverse(splitStr) {
return splitStr.split('').reverse().join('');
};
return str.split(" ").map(wordFlip).join(" ");
}
Более элегантный подход должен был бы отказаться от wordFlip
и просто использовать анонимный обратный вызов map
:
var strFlip = function(str) {
return str.split(" ").map(function(word) {
return word.split("").reverse().join("");
}).join(" ");
}
Чтобы понять, что map
делает, давайте посмотрим на forEach
первых с момента map
работ аналогичным образом. Когда вы используете array.forEach(callback)
, функция callback
вызывается для каждого элемента в array
. Это эквивалентно следующий код:
var array = [1, 2, 3];
for(var i = 0; i < array.length; i++) {
callback(array[i]);
}
По сути, это «функциональный» способ итерации по массиву и делать что-то с каждым элементом. map
также делает это; он также выполняет итерацию по массиву, но преобразует (отображает) каждый элемент массива в что-то еще и возвращает новый массив, состоящий из отображенных элементов.что-то еще определяется поведением callback
. Вот пример, аналогичный приведенному выше примеру. Здесь я с указанием фактического callback
, а так, что вы можете увидеть на поведение немного лучше:
var array = [1, 2, 3];
var squares = [];
function square(num) {
return num * num;
}
for(var i = 0; i < array.length; i++) {
squares[i] = square(array[i]);
}
Здесь square
такая же, как callback
и вызывается для каждого элемента. Возвращаемое значение square
затем используется для построения нового массива. Используя map
, вы можете переписать выше как:
var squares = array.map(function(num) {
return num * num;
});
Применяя это решение, вы можете видеть, что мы отображения каждое слово в предложении на реверсе, а затем присоединение на распределенный массив ,
Теперь я понимаю, моя самая большая проблема , Я думал, что мой код возвращает результаты вложенных функций, которые будут использоваться во всей мастер-функции в следующих вложенных выражениях. Всем спасибо! –