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 (){
        //函数体
    });
  • 相关阅读:
    DOM、Window对象操作
    JavaScript基础
    关于样式表的两个练习
    css样式表
    表单
    HTML的格式、内容容器、表格标签
    C#部分的总结
    Android自定义View之音频条形图
    String, StringBuilder, StringBuffer问题
    详解Java中ArrayList、Vector、LinkedList三者的异同点(转)
  • 原文地址:https://www.cnblogs.com/lxmwb/p/6900139.html
Copyright © 2011-2022 走看看