• 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。

  • 相关阅读:
    vue 定时器销毁的问题
    学习flutter,先学dart并安装dart sdk
    vue element-ui table 列表倒计时
    微信小程序使用symbol方式使用阿里图标库
    前端处理后台返回的图片控制台输出是乱码
    uniapp 扩展组件抽屉的使用
    C# 连接MYsql 报错Authentication plugin 'caching_sha2_password' cannot be loaded
    IE上传文件报错
    C#调用JavaHttp接口抛500内部错误
    easy ui 中grid级联操作
  • 原文地址:https://www.cnblogs.com/huaxie/p/10120381.html
Copyright © 2020-2023  润新知