对函数表达式和声明的混淆
Confusion about function expressions and declarations
所以当我偶然发现这段代码时,我正在阅读 Html5 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>
var calculator = new ns.Calculator();
包含在 ns.initialize
函数中 - 即在实际调用 ns.initialize
之前不会计算它。在它被调用时,以下代码,因此 ns.Calculator = ...
将具有 运行,并且可用。
因为我在 CalculatorLibrary.js
之后定义的脚本中调用 ns.initialize
这导致并没有导致错误,当我将这段代码移动到 [=11= 的顶部时] 我得到了我预期的错误
所以当我偶然发现这段代码时,我正在阅读 Html5 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>
var calculator = new ns.Calculator();
包含在 ns.initialize
函数中 - 即在实际调用 ns.initialize
之前不会计算它。在它被调用时,以下代码,因此 ns.Calculator = ...
将具有 运行,并且可用。
因为我在 CalculatorLibrary.js
之后定义的脚本中调用 ns.initialize
这导致并没有导致错误,当我将这段代码移动到 [=11= 的顶部时] 我得到了我预期的错误