首页 > 代码库 > [JavaScript]自执行函数

[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: false103                             }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 (){    //函数体});

 

[JavaScript]自执行函数