Main page

Тестовое задание для разработчика поисковых интерфейсов

http://company.yandex.ru/job/vacancies/dev_search_interfaces.xml

  1. Что вернёт данный код и почему?

    (function f() { function f() { return 1 } return f(); function f() { return 2 } })();

    Код вернет "2"

    Немедленно вызываемая функция f возвращает значение локальной функции function f() { return 2 }, хоть и определенной позже вызова "return f();" но согласно концепции "подъема" переменных, но переопределившей function f() { return 1 }. Фактически исполнится код: function f() { return 2; } f();

  2. Что произойдёт в результате выполнения данного кода и почему?

    var car = { color: 'red', getColor: function() { alert(this.color); } }; car.getColor(); var getColor = car.getColor; getColor();

    Первый alert выведет строку 'red', так как функция, опеределенная как метод объекта, получит в переменной this этот объект (car)

    Второй alert выведет значение переменной "color", определенной в глобальном контексте вызова функции getColor() (в случае браузера глобальным объектом будет являться window). Если эта переменная не определена, выводом будет специальное значение 'undefined'

    Чтобы вывести значение свойства "color" объекта "car" можно передать функции getColor() этот объект в качестве контекста:

    getColor.call(car);
  3. Что произойдёт в результате выполнения данного кода и почему?

    function Book() { this.name = 'foo'; } Book.prototype = { getName: function() { return this.name; } } var book = new Book(); Book.prototype.getUpperName = function() { return this.name.toUpperCase(); } book.getUpperName();

    Вызов book.getUpperName() вернет строку 'FOO'

    Сначала опеределяется функция-констуктор Book(), содержащая свойство 'name' со значением 'foo' (которое будет установлено в созданных констуктором объектах)

    Затем значению прототипа этого констуктора присваивается объект с методом getName(), возвращающий значение свойства 'name' объекта, созданного этим конструктором

    После создается переменная book, значение которой равно объекту, возвращенному конструктором Book()

    Далее в прототип констуктора Book добавляется метод getUpperName(), возвращающий значение свойства 'name' объекта, созданного этим конструктором и преобразованное в верхний регистр встроенным в язык методом toUpperCase() объекта "Строка" (объект-обертка над строкой 'foo', создаваемая интерпретатором автомагически)

    На последней строчке происходит вызов метода getUpperName() объекта book. Такого метода в объекте нет (book.hasOwnProperty('getUpperName') вернет 'false'), но он будет найден в цепочке прототипов в конструкторе Book()

  4. Сколько элементов будет в объектах elems1 и elems2 в результате выполнения этого кода и почему?

    
                        
                        
                        
                          
                          Yandex
                        
                        
                        Яндекс,
                        Yandex
                        
                        
    
                    
    var elems1 = document.getElementsByTagName('a'), elems2 = document.querySelectorAll("a"); document.body.appendChild(document.createElement("a")); console.log(elems1.length, elems2.length);

    Переменная elems1 будет содержать "живую" коллецию элементов "a" документа, на момент вызова console.log, значение elems1.length будет равно 3

    Переменная elems2 будет содержать статичный список элементов "a" документа, на момент вызова console.log, значение elems2.length будет равно 2

  5. Реализуйте систему для показа презентаций. Подумайте над тем, как реализовать переключение слайдов, навигацию. Сделайте тестовый пример с несколькими слайдами: картинка, табличка, текстовый список. Нет необходимости рисовать сложный пользовательский интерфейс и поддерживать все браузеры, достаточно корректной работы в последних версиях mozilla firefox, google chrome, safari. Разрешается и приветствуется использование jquery.

  6. Приложите, пожалуйста, ссылки на примеры своего кода и, по возможности, на сделанные вами сайты — лучше всего на github или подобных хранилищах.