当我偶然发现这段代码时,我正在阅读 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并且它有一些我不知道的魔法吗?
编辑:
初始化在我的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>
答案 0 :(得分:2)
var calculator = new ns.Calculator();
包含在ns.initialize
函数中 - 即在实际调用ns.initialize
之前不会对其进行评估。在调用它时,以下代码,因此ns.Calculator = ...
将运行,并且可用。
答案 1 :(得分:0)
因为我在ns.initialize
之后定义的脚本中调用了CalculatorLibrary.js
,这导致没有导致错误,当我将这段代码移到{{1}的顶部时我得到了我预期的错误