利用闭包,在不设置全局变量的情况下,完成再次点击退出功能

  做APP经常会用到的功能就是,第一次点击弹出退出提示,再次点击退出app

以前常规做法,就是立flag 代码如下

  var ableToOut = null;
    api.addEventListener({
        name: 'keyback'
    }, function(ret, err){
        if(!ableToOut) {
            ableToOut  = { timeout:2500 };
            return api.toast({
                msg: api.appName+' :再次点击退出应用',
                duration: 2000,
                location: 'bottom'
            });
        } else {
            setTimeout(() => {
                ableToOut = null;
            }, ableToOut.timeout);
            api.closeWidget({
                silent:true
            });
        }
    });
通过全局变量,来控制,控制同一监听事件中的不同行为,这里abletoout为设置可退出对象。在可退出对象存在时,即可退出。另外一个常规命令思路,就是flag为true的时候可以出退出。
 
这里需要添加一个全部变量。对全局造成污染,如果其他部分也需要用flag这种类型的正反判断,则容易出问题。
 
为了避免变量污染,那么我们可以采用闭包的形式。
    api.addEventListener({
        name: 'keyback'
    }, function(ret, err){
      // 每次点击返回都是一个函数
  let flag = false;
  return 
  if(!flag) {
             api.toast({
                msg: api.appName+' :再次点击退出应用',
                duration: 2000,
                location: 'bottom'
            });
    flag = true;
     setTimeout(() => {
                 flag= false;
            },2000);
        } else {
            api.closeWidget({
                silent:true
            });
        }
    });
第二种就是利用函数也是对象这一特点利用函数属性,来做区分符
 
原文地址:https://www.cnblogs.com/yaya666/p/11608632.html