Каверзный вопрос на собеседовании по Javascript

Вызов ФиззБазз

Создайте цикл for, который выполняет итерации до 100, выводя "fizz" с числом, кратным 3, "buzz" с числом, кратным 5, и "fizzbuzz" кратно 3 и 5.

Ответ:

for (let i = 1; i ‹= 100; i++) {
let f = i % 3 == 0,
b = i % 5 == 0;
console.log( f ? (b ? 'FizzBuzz' : 'Шипение') : b ? 'Buzz' : i);
}

Вызов анаграммы

Учитывая две строки, вернуть true, если они являются анаграммами друг друга.

«кино» — это анаграмма слова «ледяной человек»

Ответ:

let firstWord = «кино»;
let secondWord = «ледяной человек»;

const isAnagram = (first, second) =› {
let a = first.toLowerCase();
let b = second.toLowerCase();

a = a.split("").sort().join("");
b = b.split("").sort().join("");

вернуть a === b;
}

Анаграмма (первое слово, второе слово);

Вызов палиндрома

Если «Радар» является палиндромом, то наша функция должна возвращать истину, если нет, то возвращать ложь.

Отвечать:

const palindrome = val =› {
val = val.toLowerCase();
return val === val.split('').reverse().join('');
}

палиндром("Радар");

Найдите гласные

Теперь вам нужно найти количество гласных в заданной строке. Наша заданная строка: «rakibul».

Отвечать:

const findVowels = str =› {
const matched = str.match(/[aeiou]/gi);
return matched ? matched.length : 0;
}

найти гласные («ракибул»);

Что выведет следующий код?

let name = {
name: «Ракибул»,
sayName () {
console.log(this.name);
}
}
let sayName = name.sayName;
sayName();

Ответ:

неопределенный

Но почему мы получили это «неопределенное». Потому что мы копируем метод «sayName», который является функцией, и сохраняем его в другую переменную. И затем мы вызываем эту переменную вне его контекста. Функция «sayName()» вернет «window.name». И typeof window.name === «undefined».

Что выведет следующий код?

0.1 + 0.2 === 0.3

Ответ:

ложь

Удивительно, но это будет ложью. Потому что, когда мы добавляем «0,1 + 0,2», результатом будет «0,300000000000000004». Теперь, если мы сравним «0,30000000000000004 === 0,3, это равно? Это никогда не бывает равным. Поэтому результат "ложный".

Но мы можем решить эту проблему следующим образом:

Number(parseFloat(0.1 + 0.2).toFixed(2)) === 0.3;

Ответ:

истинный

Теперь мы получаем ожидаемый результат «true».

Что выведет следующий код?

(function() {
пусть a = b = 5;
})();

console.log(б);

Ответ:

5

Но «b» нигде не объявлено в функции с «let». Итак, почему мы получили этот результат «5». Потому что в глобальной области оно установлено равным 5.

Каким будет вывод следующего кода?

let fruit= {
name: 'Apple'
}
let fruitName = Object.create(fruit);
delete fruitName.name;
console.log(fruitName .название);

Ответ:

яблоко

Здесь мы видим результат «Apple» в качестве вывода. «fruitName» объект получил «имя» в качестве свойства prototype. «удалить» оператор не удаляет свойство прототипа. Потому что оператор «удалить» не влияет на свойство прототипа. Это влияет только на собственное свойство объекта.

Когда мы будем использовать функцию «привязки»?

Хорошо использовать функцию «связать», когда у нас есть конкретная функция, которую мы хотим вызвать с определенным значением this. Затем мы можем использовать «bind», чтобы передать конкретный объект функции, которая использует ссылку «this».

Пример:

function fullName() {
return "Здравствуйте, это " + this.firstName+ " " + this.lastName;
}

console.log(полное имя()); // => Привет, это undefined undefined

var person = {firstName: «Ракибул», lastName: «Ислам»};
console.log(fullName.bind(person)()); // =› Привет, это Ракибул Ислам

Как бы мы создали приватную переменную в JavaScript?

const privVal = () =› {
const val = «Ракибул»;
return () =› {
return val;
}
}

const getPriVal = prival();
getPriVal();