var a=10;
if(a===10){
console.log(a);
function a (){}
console.log(a);
}
Поскольку, если условие истинно, то почему значение обоих console.log поступает как функция в chrome v58 и как 10 в IE 8? См. Снимок экрана с выходными данными консоли Chrome и IE8.
Хром:
IE 8:
2 ответа
Найдите function hoisting
, как подсказал @impregnable fiend. В вашем коде, даже если вы объявляете a=10;
, Javascript будет сканировать весь код и извлекать все определенные функции, которые он находит, прежде чем делать что-либо еще. Таким образом, он найдет функцию function a() {}
и перезапишет a=10
перед вызовом console.log
.
Ваш код эквивалентен этому коду:
var a = 10;
if (a===10) {
var a = function() {};
console.log(a);
console.log(a);
}
Прежде всего, «var» и «function» идут в начало области видимости. Прочтите о прицелах и, в частности, о подъеме.
var a = 10;
. Таким образом, ваш код будет печатать 10\n10
, тогда как код OP печатает function a(){}\nfunction a(){}
.
Похожие вопросы
Связанные вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.
a
как функцию в строке 4. Эта строка эквивалентнаvar a = function() {};