Знаете ли вы о подъеме функций и переменных в JavaScript?
«Простой» вопрос по JavaScript
Джон, фронтенд-инженер нашей компании, хочет найти нового коллегу. Недавно он проинтервьюировал около 100 претендентов на работу. Он задал им тот же вопрос по JavaScript. К сожалению, 90% кандидатов ответили на него неправильно.
Я спросил Джона: «Что это за вопрос? так сложно?»
«Ну, на самом деле это совсем не сложно», — ответил Джон с улыбкой, а затем показал мне вопрос для интервью:
// you know, I change the code for my ad. :) var followImDodd = function () { console.log("please follow Stackademic, it is so interesting!"); } followImDodd(); var followImDodd = function () { console.log("please follow imdodd, he is so interesting!"); } followImDodd(); function followImDodd() { console.log("please follow Stackademic, it is so interesting!"); } followImDodd(); function followImDodd() { console.log("please follow imdodd, he is so interesting!"); } followImDodd();
Я нашел вопрос очень интересным. Некоторое время. Я дал свой ответ:
please follow Stackademic, it is so interesting! please follow imdodd, he is so interesting! please follow Stackademic, it is so interesting! please follow imdodd, he is so interesting!
Джон усмехнулся и сказал: «Ну, похоже, тебя тоже исключили».
Я был озадачен. "Почему? Разве ответ не правильный?».
«Это не совсем правильно. Позвольте мне объяснить», — сказал он.
Переменный подъем
Во-первых, Джон указал на код первых двух функций.
var followImDodd = function () { console.log("please follow Stackademic, it is so interesting!"); } followImDodd(); var followImDodd = function () { console.log("please follow imdodd, he is so interesting!"); } followImDodd();
«В целом большинство собеседников, как и вы, могут правильно ответить на эту часть»
please follow Stackademic, it is so interesting! please…