JS判断语句 注意多句时加大括号 回调函数LODOP兼顾写法
由于C-LODOP获取一些动作函数的返回值,需要用回调函数,由于常见的使用方法是混合部署,也就是同一个页面,根据浏览器的不同,可能会走LODOP ,也可能会走C-LODOP,因此写法要坚固两种,而有些人可能会不注意加大括号,而支线里又有多句,造成重复输出。
这个应该属于JS语句的执行的范畴,也就是if else里,如果支线有多个语句,需要用大括号括起来,否则会当作if else之外的语句执行。
测试代码如下:
<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>JS判断支线里,多个语句,不加大括号括起来,会不当做在支线里,</title> <script language="javascript" src="LodopFuncs.js"></script> </head> <body> <a href="javascript:getSystemInfo11()">lodop输出不带回调</a><br><!--lodop正常,c-lodop返回不正常--> <a href="javascript:getSystemInfo22()">带回调,直接console返回值</a><br><!--都正常直接console返回值--> <a href="javascript:getSystemInfo33()">支线判断不加大括号,两次赋值</a><br><!--支线判断不加大括号,两次赋值,结果先undefined后正确值--> <a href="javascript:getSystemInfo44()">支线判断加大括号,两次赋值</a><br><!--都正常--> <a href="javascript:getSystemInfo55()">支线判断不加大括号,两次赋值 alert</a><br><!--弹出两次,c-lodop里的和最后的都执行了--> <script language="javascript" type="text/javascript"> var LODOP; //声明为全局变量 function getSystemInfo11(){ LODOP=getLodop(); var cd=LODOP.GET_SYSTEM_INFO("Drive.Labels"); console.log(cd); }; function getSystemInfo22(){ LODOP=getLodop(); if (LODOP.CVERSION) CLODOP.On_Return=function(TaskID,Value){console.log(Value);}; strResult=LODOP.GET_SYSTEM_INFO("Drive.Labels"); if (!LODOP.CVERSION) console.log(strResult); }; function getSystemInfo33(){//两个console都执行了 LODOP=getLodop(); var cd; if (LODOP.CVERSION) CLODOP.On_Return=function(TaskID,Value){cd=Value;console.log(cd);}; strResult=LODOP.GET_SYSTEM_INFO("Drive.Labels"); if (!LODOP.CVERSION) cd=strResult;console.log(cd); }; function getSystemInfo44(){//支线加大括号,支线不符合时不再执行 LODOP=getLodop(); var cd; if (LODOP.CVERSION) CLODOP.On_Return=function(TaskID,Value){cd=Value;console.log(cd);}; strResult=LODOP.GET_SYSTEM_INFO("Drive.Labels"); if (!LODOP.CVERSION) {cd=strResult;console.log(cd);} }; function getSystemInfo55(){//两个alert都执行了 LODOP=getLodop(); var cd; if (LODOP.CVERSION) CLODOP.On_Return=function(TaskID,Value){cd=Value;alert(cd);}; strResult=LODOP.GET_SYSTEM_INFO("Drive.Labels"); if (!LODOP.CVERSION) cd=strResult;alert(cd);//不加大括号,弹出两次,c-lodop本身的执行后,支线第二句不会当作支线里的。 }; </script> </body>
如图,测试代码的结果:
c-lodop测试结果(高版本的火狐谷歌,或qq,360一些浏览器的极速模式)
(错误)不带回调,在使用c-lodop的时候:7BCAAAJ1091_1、7BCAAAJ1091_2。。。。。
(正确)带回调,直接console返回值:CDEF
(错误)支线判断不带大括号,两次赋值,esle里两个语句,没有括起来:输出两个log,undefined CDEF
(正确)支线加大括号,两次赋值在大括号里,else两个语句括起来:CDEF
(错误)支线判断不带大括号,两次赋值,esle里两个语句,没有括起来,把输出log改成alert:弹出两次,一次undefined,一次CDEF。