var STATE = {
IDLE: 1,
READY: 2,
ERROR: 3
};
var state = STATE.IDLE;
var jssdk = {
init: function(version,plt,arr){
if(state==STATE.IDLE){ //这个地方的state为STATE.IDLE
// do something 1
try{
var array = JSON.parse(arr);
}catch(e){
state = STATE.READY;
return;
}
for(var i in array){
var funcName = array[i];
jssdk[funcName] = (function(name){
return (function(paramObj){
if(state==STATE.READY){ // 这个地方的state为STATE.READY
// do something 2
} else{
//do something 3
}
});
})(funcName);
}
state = STATE.READY; // 把这句注视掉就会有问题
}
}
};
调试一段代码的时候,不知道为什么会执行到代码中的do something 2
这个地方。当然,我是执行这个init方法的时候
已经知道了答案,自己纠结太久了
jssdk[funcName] = (function(name){
return (function(paramObj){
if(state==STATE.READY){ // 这个地方的state为STATE.READY
// do something 2
} else{
//do something 3
}
});
})(funcName);
这个只是一个赋值,并没有去执行这个东西,我一直当作执行来做的。但是我们执行的时候,那个state的值已经是READY了
大概效果就是这样的了
var state = 1;
sdk ={
};
function test(name){
if(state==2){
alert(name);
}else{
alert("haha");
}
}
sdk["test"] = test;
state =2;
sdk.test("123");
没有state = STATE.READY;
的时候:
我加了个console
if(state==STATE.READY){
// do something 2
console.log("22222222222");
} else{
//do something 3
}
这样运行的:
jssdk.init( '', '','{"init":"init", "aa":"a13"}');
jssdk.a13();
控制台并没有输出,加了state = STATE.READY;
就会输出2222了。
楼主原来没有state = STATE.READY;
的时候感觉没问题啊
没看明白(: