所以我读了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