[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));

这就不懂了,为什么一个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 (){
    //函数体
});

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏xx_Cc的学习总结专栏

iOS-UITextField 全面解析iOS中UITextField 使用全面解析UITextField的代理方法通知UITextField 在storyboard 中设置属性

3816
来自专栏前端说吧

echarts - 使用echarts过程中遇到的问题(pending...)

现象描述:有一个tabs选项卡,每个切换项A、B中都有使用echarts,默认展示的A项中的ecarts初始化和绘制都没问题。

632
来自专栏小程序的道路

微信小程序布局

开始我们的入门后,接下来就可以开始创建我们的第一个demo页面了。按照官网的步骤,在pages模块下新建我们自己的模块demo,添加好对应的文件,然后在app....

2386
来自专栏WOLFRAM

show函数组合多个图形在同一个坐标系下

792
来自专栏青玉伏案

iOS开发之多图片无缝滚动组件封装与使用

  经常有园友会问"博主,有没有图片无限滚动的Demo呀?", 正儿八经的图片滚动的Demo我这儿还真没有,今天呢就封装一个可以在项目中直接使用的图片轮播。没看...

1799
来自专栏Nian糕的私人厨房

CSS 消除 inline-block 元素间的间隙

从上图的运行结果可以看到,添加 display: inline-block; 属性后,水平呈现的元素间产生了空隙,出现这一现象的本质是,HTML 中存在的空白符...

684
来自专栏前端小叙

动态添加的html元素绑定事件的方法

在js中写好方法名对应的方法就可以了,如果绑定方法的元素太多,可以考虑使用方法二;

724
来自专栏谈补锅

JS DOM学习笔记

2、使用window对象的属性、方法的时候可以省略window。例如:window.alert("hello")一般写成alert("hello"); wind...

1104
来自专栏james大数据架构

SwitchButton 开关按钮 的多种实现方式

刚开始接触开关样式的按钮是在IOS系统上面,它的切换以及滑动十分帅气,深入人心。 所谓的开关按钮,就是只有2个状态:on和off,下图就是系统IOS 7上开关按...

1997
来自专栏十月梦想

vue入门基础详解之组件元素不对应以及ref用法

在我们使用table时候,table的结构是table>tbody>tr>td,但是我们之间在table下面定义一个包含详情的组件,在table下使用多个会出现...

682

扫码关注云+社区