zoukankan      html  css  js  c++  java
  • [JavaScript]自执行函数

    最近在接触mui的时候,遇到了一段代码:

      1 (function($, doc) {
      2                 $.init({
      3                     statusBarBackground: '#f7f7f7'
      4                 });
      5                 $.plusReady(function() {
      6                     plus.screen.lockOrientation("portrait-primary");
      7                     var settings = app.getSettings();
      8                     var state = app.getState();
      9                     var mainPage = $.preload({
     10                         "id": 'main',
     11                         "url": 'tab-webview-main.html'
     12                     });
     13                     var main_loaded_flag = false;
     14                     mainPage.addEventListener("loaded",function () {
     15                         main_loaded_flag = true;
     16                     });
     17                     var toMain = function() {
     18                         //使用定时器的原因:
     19                         //可能执行太快,main页面loaded事件尚未触发就执行自定义事件,此时必然会失败
     20                         var id = setInterval(function () {
     21                             if(main_loaded_flag){
     22                                 clearInterval(id);
     23                                 $.fire(mainPage, 'show', null);
     24                                 mainPage.show("pop-in");
     25                             }
     26                         },20);
     27                     };
     28                     
     29                     // close splash
     30                     setTimeout(function() {
     31                         //关闭 splash
     32                         plus.navigator.closeSplashscreen();
     33                     }, 600);
     34                     var loginButton = doc.getElementById('login');
     35                     var accountBox = doc.getElementById('account');
     36                     var passwordBox = doc.getElementById('password');
     37                     var autoLoginButton = doc.getElementById("autoLogin");
     38                     var regButton = doc.getElementById('reg');
     39                     var forgetButton = doc.getElementById('forgetPassword');
     40                     loginButton.addEventListener('tap', function(event) {
     41                         var username = $('#account').val();
     42                         var password = $('#password').val();
     43                     
     44                           // LeanCloud - 登录
     45                           // https://leancloud.cn/docs/leanstorage_guide-js.html#用户名和密码登录
     46                           AV.User.logIn(username, password).then(function (loginedUser) {
     47                                 toMain();
     48                           }, function (error) {
     49                                 // 导入AlertDialog类  
     50                             var AlertDialog = plus.android.importClass("android.app.AlertDialog");  
     51                                 // 创建提示框构造对象,构造函数需要提供程序全局环境对象,通过plus.android.runtimeMainActivity()方法获取  
     52                             var dlg = new AlertDialog.Builder(plus.android.runtimeMainActivity());  
     53                             // 设置提示框标题  
     54                             dlg.setTitle("登陆失败");  
     55                             // 设置提示框内容  
     56                             dlg.setMessage("用户名或密码不正确!"+JSON.stringify(error));  
     57                             // 设置提示框按钮  
     58                             dlg.setPositiveButton("OK",null);  
     59                             // 显示提示框  
     60                             dlg.show();  
     61                           });
     62                     });
     63                     $.enterfocus('#login-form input', function() {
     64                         $.trigger(loginButton, 'tap');
     65                     });
     66                     autoLoginButton.classList[settings.autoLogin ? 'add' : 'remove']('mui-active')
     67                     autoLoginButton.addEventListener('toggle', function(event) {
     68                         setTimeout(function() {
     69                             var isActive = event.detail.isActive;
     70                             settings.autoLogin = isActive;
     71                             app.setSettings(settings);
     72                         }, 50);
     73                     }, false);
     74                     regButton.addEventListener('tap', function(event) {
     75                         $.openWindow({
     76                             url: 'reg.html',
     77                             id: 'reg',
     78                             preload: true,
     79                             show: {
     80                                 aniShow: 'pop-in'
     81                             },
     82                             styles: {
     83                                 popGesture: 'hide'
     84                             },
     85                             waiting: {
     86                                 autoShow: false
     87                             }
     88                         });
     89                     }, false);
     90                     forgetButton.addEventListener('tap', function(event) {
     91                         $.openWindow({
     92                             url: 'forget_password.html',
     93                             id: 'forget_password',
     94                             preload: true,
     95                             show: {
     96                                 aniShow: 'pop-in'
     97                             },
     98                             styles: {
     99                                 popGesture: 'hide'
    100                             },
    101                             waiting: {
    102                                 autoShow: false
    103                             }
    104                         });
    105                     }, false);
    106                     //
    107                     window.addEventListener('resize', function() {
    108                         oauthArea.style.display = document.body.clientHeight > 400 ? 'block' : 'none';
    109                     }, false);
    110                     //
    111                     var backButtonPress = 0;
    112                     $.back = function(event) {
    113                         backButtonPress++;
    114                         if (backButtonPress > 1) {
    115                             plus.runtime.quit();
    116                         } else {
    117                             plus.nativeUI.toast('再按一次退出应用');
    118                         }
    119                         setTimeout(function() {
    120                             backButtonPress = 0;
    121                         }, 1000);
    122                         return false;
    123                     };
    124                 });
    125             }(mui, document));
    mui

    这就不懂了,为什么一个function函数要放在一个括号里面,括号里面还有一个括号(mui,document),看起来像是参数一样。还以为这是Native.js里面的内容,然后去官方文档中翻看了一下Njs的内容,并不是啊,然后去百度。

    自执行函数

    自执行函数(function(jquery){}(jquery));
    * 相当于下面的代码:

    var fun = function(jquery){};
    fun(jquery);

    * 立即执行匿名函数fun(jquery);主要是为了避免jquery与其他类库或变量有冲突。

    百度中有好多jquery字样出现,但是并没有明确说跟jquery有关系,我也是不太清楚。

    mui的demo中(function($, doc) {}(mui, document));据说可以让函数在文档加载完毕之后再执行,相当于

    $(document).ready(function (){
        //函数体
    });
  • 相关阅读:
    hdu 4027 Can you answer these queries? 线段树
    ZOJ1610 Count the Colors 线段树
    poj 2528 Mayor's posters 离散化 线段树
    hdu 1599 find the mincost route floyd求最小环
    POJ 2686 Traveling by Stagecoach 状压DP
    POJ 1990 MooFest 树状数组
    POJ 2955 Brackets 区间DP
    lightoj 1422 Halloween Costumes 区间DP
    模板 有源汇上下界最小流 loj117
    模板 有源汇上下界最大流 loj116
  • 原文地址:https://www.cnblogs.com/lxmwb/p/6900139.html
Copyright © 2011-2022 走看看