// 3. fails presumably due to syntax error
return str1.every(sameChars) && str2.every(sameChars);
function sameChars((c) => str1.includes(c) && str2.includes(c));
Строка, помеченная //3. fails presumably due to syntax error
, фактически содержит синтаксическую ошибку, как показано в исполняемом фрагменте ниже.Как было отмечено в комментариях, вы смешиваете формат объявления функции и функции стрелки .Функция Arrow - это сокращенный синтаксис для выражения функции .Объявления функций поднимаются 1 , а выражения функций - нет, поэтому «основной код» работает с объявлением функции.
function canRearrange(str1,str2) {
str1 = str1.split(''), str2 = str2.split('');
if (str1.length != str2.length) {
throw "Bad Input";
} else {
return str1.every(sameChars) && str2.every(sameChars);
function sameChars((c) => str1.includes(c) && str2.includes(c));
}
}
console.log(canRearrange('teset','testy')); // false
console.log(canRearrange('teste','teset')); // true
console.log(canRearrange('tes','set')); // true
Действительно ли важно иметь функцию, определенную над оператором return
?Там не будет зависеть от подъема таким образом ...
function canRearrange(str1,str2) {
str1 = str1.split(''), str2 = str2.split('');
if (str1.length != str2.length) {
throw "Bad Input";
}
const sameChars = c => str1.includes(c) && str2.includes(c);
return str1.every(sameChars) && str2.every(sameChars);
}
console.log(canRearrange('teset','testy')); // false
console.log(canRearrange('teste','teset')); // true
console.log(canRearrange('tes','set')); // true
Если вы не можете жить с первым вариантом, вы можете использовать формат объявления функции, но все в одной строке.Кто-то может поспорить, что таким образом он менее читабелен.
function canRearrange(str1,str2) {
str1 = str1.split(''), str2 = str2.split('');
if (str1.length != str2.length) {
throw "Bad Input";
}
return str1.every(sameChars) && str2.every(sameChars);
function sameChars(c) { return str1.includes(c) && str2.includes(c)};
}
console.log(canRearrange('teset','testy')); // false
console.log(canRearrange('teste','teset')); // true
console.log(canRearrange('tes','set')); // true
1 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function#Function_declaration_hoisting