ответа не предоставил надлежащее описание вашей проблемы там. Поэтому я сделаю все возможное. Проблема, с которой вы столкнулись, заключается в том, что function declarations
(это то, что вы там получили) относятся к некоторым другим вещам, интерпретируемым до выполнения javascript. Этот эффект часто называют hoisting
, и это означает, что эти функции действительно перемещаются в начало текущего контекста для времени выполнения скрипта.
Пример, в вашем фрагменте кода, это то, что происходит:
<script>
var num = 0;
function lol(){
alert("lol");
}
function lol(){
alert("haha");
}
if(num==0) {
} else {
}
</script>
Таким образом, простое решение в данном конкретном случае это, просто не использовать объявления функций, но вместо этого function expression
. Мы можем заставить наш двигатель, чтобы создать FE несколько способов, например, мы можем назначить его как
var num = 0,
lol;
if(num === 0) {
lol = function() {
alert('lol');
};
}
else {
lol = function() {
alert('haha');
};
}
Выражение функции не получает поднятое к началу текущего контекста, потому что его не «предварительно оцениваются» по движок js. Таким образом, вышеуказанный код сделает это.
У вас есть состояние здесь. Поэтому этот скрипт определяет только одну функцию, первую или другую. В конечном счете, это зависит от состояния. В вашем случае будет запускаться предупреждение lol при каждом запуске этого скрипта. – Anthony
Много отличных ответов, но я награждаю значок «ответил» человеку, который ответил первым и придерживался формата, который мне нужно выполнить :) Еще раз спасибо – Tim
Спасибо. Стоит исследовать темы, упомянутые в ответах fyr и jAndy. –