关于js中立即执行的匿名函数写法
/*最流行的写法*/
(function() {
alert("run!")
})(); /* !号可以有1~正无穷个,所以这一种就可以衍生无数种方式 */
!!!(function() {
alert("run!")
})(); (function() {
alert("run!")
}).call(); (function() {
alert("run!")
}).apply(); (function() {
alert("run!")
}()); void(function() {
alert("run!")
})(); ~(function() {
alert("run!")
})(); ~!(function() {
alert("run!")
})(); /* 这个最好玩 */
delete(function() {
alert("run!")
})(); + (function() {
alert("run!")
})(); - (function() {
alert("run!")
})(); setTimeout(function() {
alert("run");
}, 0); /*自由变态组合,可以衍生出无数种方式*/
~+-!(function() {
alert("run!")
})();
上面是直接扣别人整理的 ,所有的方式都将匿名函数用小括号给包起来调用; 而我在学习bootstrap.js 里边的插件写法时候遇到却不用 如下
// 1. 定义立即调用的函数
+function($){
"use strict"; //使用严格模式ES5支持
//后续步骤
// 2. xx 插件类及原型方法的定义
// 3. 在jQuery上定义xx插件,并重设插件构造器
// 4. 防冲突处理
// 5. 绑定触发事件
}(window.jQuery)
今天有些了一个倒计时跳转的js时, 还是以为直接 function(){}() 这样就可以调用了,结果试了半天都不可以; 最后还是用最正统的 (function(){})() 写法才成功;
接着尝试发现 bootstrap那种写法只有前面符号是 ~!+- 这几个才能成功(也就是上面 最后一种写法), 难道是通过运算符执行后面的语句?
顺便贴上代码
var countdown=10;
var $btnBack=document.getElementById("btnBack");
+function (){
if(countdown>0)
{
$btnBack.innerHTML=countdown+" seconds left";
setTimeout(arguments.callee,1000);
countdown--; }
else
{
alert("over");
}
}();
结论:如果不将匿名函数用小括号包起来 前面就必须加上 ~!+- 中的一个或多个或组合。。。
~function(){}()
!function(){}()
+function(){}()
-function(){}()
关于js中立即执行的匿名函数写法的更多相关文章
- js闭包中的this(匿名函数中的this指向的是windows)
js闭包中的this(匿名函数中的this指向的是windows) 一.总结 1.普通函数中的this指向的是对象,匿名函数中的this指向的是windows,和全局变量一样 2.让匿名函数中的thi ...
- JavaScript中的闭包与匿名函数
知识内容: 1.预备知识 - 函数表达式 2.匿名函数 3.闭包 一.函数表达式 1.定义函数的两种方式 函数声明: 1 function func(arg0, arg1, arg2){ 2 // 函 ...
- 进阶学习js中的执行上下文
在js中的执行上下文,菜鸟入门基础 这篇文章中我们简单的讲解了js中的上下文,今天我们就更进一步的讲解js中的执行上下文. 1.当遇到变量名和函数名相同的问题. var a = 10; functio ...
- 浅析PHP中的闭包和匿名函数
PHP闭包和匿名函数使用的句法与普通函数相同,但闭包和匿名函数其实是伪装成函数的对象(Closure类的实例) .下面给大家介绍PHP中的闭包和匿名函数知识,需要的朋友参考下吧 闭包是指在创建时封 ...
- js中的执行环境及作用域
最近在面试时被问到了对作用域链的理解,感觉当时回答的不是很好,今天就来说说js中的作用域链吧. 首先来说说js中的执行环境,所谓执行环境(有时也称环境)它是JavaScript中最为重要的一个概念.执 ...
- JS中的日期内置函数
用JS中的日期内置函数实现在页面显示:“今天是:2013年9月26日14:32:45”. var date=new Date(Date.parse('9/26/2013 14:32:45')); ...
- 有趣的js匿名函数写法(function嵌套)
例子没有什么实际意义,只能做为思路参考 <!DOCTYPE html> <html> <head> <meta charset="UTF-8&quo ...
- js中ajax连接服务器open函数的另外两个默认参数get请求和默认异步(open的post方式send函数带参数)(post请求和get请求区别:get:快、简单 post:安全,量大,不缓存)(服务器同步和异步区别:同步:等待服务器响应当中浏览器不能做别的事情)(ajax和jquery一起用的)
js中ajax连接服务器open函数的另外两个默认参数get请求和默认异步(open的post方式send函数带参数)(post请求和get请求区别:get:快.简单 post:安全,量大,不缓存)( ...
- JS中立即执行函数的理解
1.匿名函数不能单独定义,必须进行赋值操作或者立即执行,否则会被JS引擎定义为语法错误 function(){alert(dada);} VM229:1 Uncaught SyntaxError: U ...
随机推荐
- ownDocument和documentElement
<!DOCTYPE html> <html> <head> <meta name="viewport" content="wid ...
- Redis单机版安装与部署
Redis官网:http://redis.io 下载Redis wget https://github.com/antirez/redis/archive/3.0.0-rc1.tar.gz 解压并安装 ...
- JNI_Android项目中调用.so动态库实现详解【转】
转自 http://www.cnblogs.com/sevenyuan/p/4202759.html 1. 在Eclipse中创建项目:TestJNI 2. 新创建一个class:TestJNI.ja ...
- Android GridView 指定行数,动态行宽,占满空间
有时间我们需要 使用GridViw 让它占满父控件,例: 特别是在适配的时间比较麻烦,在不同的机型上可能分出下,下面空的太多,或有滚动条问题,; 下面说一下实现思路: 首先,设置GridView 为三 ...
- com学习(一)GUID 和 接口
话说在 doc(Word) 复合文件中,已经解决了保存 xls(Excel) 数据的问题了.那么,接下来又要解决另一个问题:当 WORD 程序读取复合文件,遇到了 xls 数据的时候,它该如何启动 E ...
- c# 动态调用webserver
object[] paramList = new object[1]; paramList.SetValue("123456",0); //参数值,参数位置 var result ...
- 在 mvc 中使用下拉列表
在mvc中经常会使用到下拉列表,以下以两种方式来实现,一种是以 @Html.DropDownList 扩展方法,一种是以 <select><option></optio ...
- Eclipse 安装反编译插件jadclipse
下载jadClipse地址: 链接: http://pan.baidu.com/s/1kTN4TPd 提取码: 3fvd 将net.sf.jadclipse_3.3.0.jar拷贝到eclipse的 ...
- 二模11day1解题报告
T1.树的重量(weight) 给出一棵n个叶节点的树(但是有多组数据)以及n个节点之间的距离(最短距离...然而也只有一条路),求树的所有边权之和. 一开始完全没有思路啊...难道爆搜模拟??狂汗. ...
- Hyper-V下安装Ossim系统
WindowsServer2008Hyper-V下安装Ossim系统 背景:很多朋友在用Hyper-v安装Linux的时候总是抱怨速度很慢,而且装好了系统无法识别网卡,可实际上针对网卡的问题本文提出了 ...