目的:学习 闭包,立即执行函数
概要:类型二,因使用立即函数,new新对象时,变量[counter_gad]未初始化。此与类型一不同点!!
类型一:
var closureMode = function () {
var countNo = 0;
return function (){
return (countNo += 1);
};
};
var closureOne = new closureMode();
console.log("1.closureOne.countNo:" + closureOne.countNo); // undefined
console.log("2.closureMode.countNo:" + closureMode.countNo); // undefined
console.log("3.closureOne:" + closureOne()); // 1
console.log("4.closureOne:" + closureOne()); // 2
var closureTwo = new closureMode();
console.log("1.closureTwo:" + closureTwo()); // 1
console.log("2.closureTwo:" + closureTwo()); // 2
类型二:
var Gadget = (function () {
var counter_gad = 0;
NewGadget = function () {
// counter_gad += 1;
};
NewGadget.prototype.getCounter = function () {
return counter_gad += 1;;
};
return NewGadget;
}()); // 立即执行函数。
var g1 = new Gadget();
utilTemp.log("g1.getCounter():" + g1.getCounter()); // 1
utilTemp.log("g1.getCounter():" + g1.getCounter()); // 2
var g2 = new Gadget();
utilTemp.log("g2.getCounter():" + g2.getCounter()); // 3

本文探讨了JavaScript中闭包和立即执行函数的概念,并通过两个示例对比了它们的行为差异。类型一展示了如何创建简单的闭包来维护状态,而类型二则通过立即执行函数展示了一个共享状态的问题实例。

被折叠的 条评论
为什么被折叠?



