Всё о web

Для чайников и не только


Задачи и вопросы по Javascript используемые на интервью часть 2

Май 27, 2018

Это вторая часть задач по javascript, но теперь это взгляд со стороны работодателя. Это вопросы которые задаю я при собеседовании на позицию javascript developer. Я постарался перечислить их от более простых к более сложным. Вопросов не много, не обязательно они задаются все, и не обязательно в таком же порядке.

1. Есть несколько способов декларации переменных:

test1 = 1;
var test2 = 2;
let test3 = 3;
const test4 = 4;

Чем они отличаются?

2. Если Вы молодой и шутливый, то наверняка в 1 вопросе Вы сказали что "test1 = 1;" не работает, вернёт ошибку. Это не верно, почему?

3.

const x = 0;
x = 3; // error

const test = {
  x: 0
};
test.x = 3; // success!

Почему?

4.

x = 1;
console.log(x); // 1
var x = 0;

Почему консольлог выводит 1 ?

4.1 Если ответили на прошлый, то почему:

x = 1; // ReferenceError: x is not defined
console.log(x);
let x = 0;

Возвращает ошибку?

5. Есть несколько консольлогов:

console.log( function() { return 1; } );
console.log( function() { return 1; }() );
console.log( new function() { return 1; } );
console.log( new function() { return 1; }() );

Собсно что они покажут?

6. Есть тестовый массив и есть классический, олдскульный способ обхода массива и вывода значений в консольлог:

let arr = [ 1, 2, 3, 4 ];
for(let i=0; i<arr.length; i++)
  console.log(i);

Перечислите, пожалуйста, другие способы обхода массива (желательно не меньше 4), но без извращений вроде while циклов, только специализированные методы для работы с массивами.

7. Что такое стрелочные функции и чем они отличаются от обычных?

8. Почему следующий пример:

const arr = [ 1, 2, 3 ];
const result = arr.map( n => { value: n } );
console.log( result );

Возвращает [ undefined, undefined, undefined ] а не [ { value: n }, { value: n }, { value: n } ] ? И как это пофиксить?

9.

const adder = {
  sum: 0,
  add(num) {
    num.forEach( function(el) {
      this.sum += el;
    });
  }
}

adder.add([ 1, 2, 3 ]);
console.log( adder.sum );

Почему консольлог возвращает 0 и как это исправить? Для чистоты эксперимента не смотрите на следующий пример.

9.1

const adder = {
  sum: 0,
  add: num => {
    num.forEach( el => {
      this.sum += el;
      console.log( this );
    });
  }
}

adder.add([ 1, 2, 3 ]);
console.log( adder.sum );

А почему в этом примере опять получаем 0 в консольлоге?

10. Есть код:

const Test = function() {
  this.val = 0;
}

let test1 = new Test();

console.log( Test );
console.log( test1 );

Почему в первом случае выводится: [Function: Test]

А во втором: Test { val: 0 }

11. Есть объект: { x: 1, y: 2, i: 3 } как получить все ключи объекта?

12. Есть некая апи, которая возвращает данные по статистике в виде следующего объекта:

{
  result: 'success',
  items: [
    {
      total: 10,
      blocked: 5,
      whiteListed: 3
    },
    {
      total: 15,
      blocked: 2,
      whiteListed: 6
    },
    ...
  ]
}

Для построения графиков нужно сделать отдельные массивы данных по каждому свойству, например:

let total = [ 10, 15, ... ];
let blocked = [ 5, 3, ... ];
let whiteListed = [ 3, 6, ... ];

13. Почему следующий код

for(var i=0; i<3; i++)
  setTimeout( function() {
    console.log(i);
  }, 0 );

Выводит:

3
3
3

а не

0
1
2

И как это исправить?

14.

let x = 1;
let test1 = {
  x: 1
};

let y = x;
let test2 = test1;
test2.x = 2;
y = 2;

console.log( x );
console.log( test1.x );

Что будет в логе и почему?

Первую часть можно найти тут. Так же можно посмотреть Задачи по nodejs для начинающих.



Комментарии

Оставить комментарий:

Ваш e-mail не будет опубликован. Обязательные поля помечены *