日期:2014-05-16  浏览次数:20316 次

关于JS的自调用函数问题
本帖最后由 tangtangzizi 于 2013-03-28 16:34:24 编辑

complateDeviceBtn = $('#...');
complateDeviceBtn.bind('click',function(e){
callback=function(result){
success=function(result){MsgBox.success('部署完成');}
error=function(result){MsgBox.error(result.message)}
//console.log(error);
(result.success?success:error)(result);
}
complateDeviceAjaxAction.setProperty('deviceMainId','${row.MAINID}');
complateDeviceAjaxAction.send('deploy',callback);
});


当执行到(result.success?success:error)(result);就提示undefined了,但如果在这一句前面加上console.log(error);就可以执行通过,为什么?

------解决方案--------------------
估计是那个 ; 的问题,
error=function(result){MsgBox.error(result.message)}加上;试试
------解决方案--------------------
独立测试,就是;的问题


var showner=function(result){
success=function(result){console.log('部署完成');}
error=function(result){console.error(result.message)};//这里的;你原来是没有的,FF下出错.
//console.log(error);
(result.success?success:error)(result);
}

showner({"success":"true",message:"message"});


------解决方案--------------------
当一行的第一个字符是+-=,.(){}[]时它会试图与上一行合并成一条语句来解释。
所以你的代码被解释成
error=function(result){MsgBox.error(result.message)}(result.success?success:error)

------解决方案--------------------
error=function(result){MsgBox.error(result.message)};
加个分号试下
------解决方案--------------------
同上,加分号。。

JS里面出了名的立即执行的匿名函数的写法就是

function(w){

}(window)


所以呢就是直接执行了你的error函数