所以我讀了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();
此代碼調用fu此時此刻還沒有被讀取的nction表達式。爲什麼這個工作?我一直認爲只有函數聲明可以在聲明它們的行之前被調用。
這是因爲它是一個IIFE,它有一些我不知道的魔法?
編輯:
初始化獲取我的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>
'納秒的誤差叫
ns.initialize
。 initialize'實際上並沒有被稱爲 – 2015-03-13 17:25:59FYI,這個代碼會在ES5嚴格模式下產生一個錯誤,因爲'this'將會是'undefined'。 – JLRishe 2015-03-13 17:31:08
我認爲這是全局對象(窗口)在這裏? – 2015-03-13 17:34:39