Так что я читал вверх Html 5 CSS учебное пособие на сертификат Microsoft, когда я наткнулся на этот кусок кода:Путаница функциональных выражений и деклараций
CalculatorLibrary.js
(function() {
this.calculatorNamespace = this.calculatorNamespace || {};
var ns = this.calculatorNamespace;
ns.initialize = function() {
var calculator = new ns.Calculator();
$("button[id^='btnNumber']").on('click', calculator.numberClick);
$('#btnPlus').on('click', calculator.plusClick);
$('#btnMinus').on('click', calculator.minusClick);
$('#btnClearEntry').on('click', calculator.clearEntry);
$('#btnClear').on('click', calculator.clear);
calculator.clear();
};
ns.Calculator = (function() {
function Calculator() {
}
//Some prototype code
return Calculator;
})();
})();
сейчас Я не понимаю, почему это не выдаст ошибку, когда разбирает достигает этой линии:
var calculator = new ns.Calculator();
этот код призывающую фу которое в данный момент еще не было прочитано. Почему это работает? Я всегда думал, что только объявления функций могут быть вызваны до строки, которую они объявили.
Это потому, что это IIFE, и у него есть какая-то магия, которая мне неизвестна?
EDIT:
инициализации вызывается, в моем index.html (нижняя часть тела):
<script src="../../../Exercise1Completed/WebCalculatorSolution/packages/jQuery.1.8.2/Content/Scripts/jquery-1.8.2.js"></script>
<script type="text/javascript" src="Scripts/CalculatorLibrary.js"></script>
<script type="text/javascript">
$(function(){
calculatorNamespace.initialize();
});
</script>
'нс. initialize' на самом деле не называется –
FYI, этот код приведет к ошибке в строгом режиме ES5, потому что 'this' будет' undefined'. – JLRishe
Я думал, что это глобальный объект (окно) здесь? –