方法一:
正常工作代码
var foo1 = function() {
var t1 = new Date();
console.log("initialise - one time only "+this);
foo1 = function() {
console.log("Executes everytime after initialising(initialise should not execute again) "+this);
return t1;
};
return foo1();
};
执行: foo1();
输出:
第一次
初始化 - 仅一次 [对象窗口]
每次初始化后执行(初始化不应再次执行)[对象窗口]
每隔一段时间
每次初始化后执行(初始化不应再次执行)[对象窗口]
方法二
我在 javascript 的模块中尝试相同的方法
var tt=(function(){
var foo = function() {
var that=this;
var t = new Date();
console.log("initialise - one time only" + this);
foo = function() {
console.log("Executes everytime after initialising(initialise should not execute again) "+this);
return t;
};
return foo();
}
return {
foo:foo
};
})();
执行:tt.foo();
输出:
第一次
初始化 - 仅一次[object Object]
每次初始化后执行(初始化不应再次执行)[对象窗口]
每隔一段时间
初始化 - 仅一次[object Object]
每次初始化后执行(初始化不应再次执行)[对象窗口]
为什么 foo1 在方法 2 中再次初始化?
为什么在方法 2 中,模块模式内部的 this 范围会更改为 window ?
如何使方法 2 像方法 1 一样工作?
请给出一个概念解释方法 2 有什么问题。提前致谢。