- 浏览: 2306408 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (559)
- JavaScript (55)
- windows (21)
- mysql (7)
- php (199)
- thinkphp (2)
- 互联网 (42)
- flash (3)
- html (9)
- phpcms (11)
- ffmpeg (6)
- 生活 (108)
- flash小游戏 (11)
- 软件 (35)
- css (1)
- JavaScript 二维码 (0)
- 二维码 (1)
- 桌面图标 (1)
- ping服务 (1)
- 百度 (2)
- 搜索引擎 (1)
- seo (1)
- 整形美容 (1)
- 深圳婚纱摄影 (1)
- 武汉婚纱摄影 (2)
- 淘宝 (0)
- 冬装 (0)
- 女装 (0)
- 新款冬装女装 (0)
- freebsd 操作系统 (1)
- editplus (1)
- svn (1)
- 微信 (1)
- 微商 (1)
- curl (1)
- 远程 (1)
- 防盗链 (1)
- vc2012 (1)
- Alexa (1)
- bootstrap (1)
- fileinput (1)
- webuploader (1)
- mip (1)
- 正则 (1)
最新评论
-
hexawing:
啥原理……貌似很神奇啊
excel写保护(非打开保护)的破解方法 -
化蝶自在飞:
注意upload.js的配置参数 sendAsBinary
webuploader实例php 配合fastDFS远程跨域上传回调的注意点 -
化蝶自在飞:
增加一个微信内置浏览器的useragent:
Mozilla/ ...
浏览器useragent大全 -
化蝶自在飞:
leiliang10 写道你揍是个骗纸此话怎讲?这个工具是我自 ...
mp4、mov视频元数据头信息修复工具 支持h.264编码边下边播 -
leiliang10:
你揍是个骗纸
mp4、mov视频元数据头信息修复工具 支持h.264编码边下边播
js匿名函数确实是个好东西.
还可以写成:
从以上例子中可以看出,js匿名函数的执行是在 onload 之前,那么空函数是否可以取代onload的动作?
js匿名函数的写法还有n多种.
顾名思义,匿名函数就是没有实际名字的函数。例如,我们把上面的例子中,函数的名字去掉,再判断一下他是不是一个函数:
复制代码 代码如下:
alert(typeof function(){});// "function"
alert(typeof function(x,y){return x+y;});// "function"
alert(typeof new Function("x","y","return x*y;"))// "function"
alert(typeof function(){});// "function" alert(typeof function(x,y){return x+y;});// "function" alert(typeof new Function("x","y","return x*y;"))// "function"
我们可以很容易地看到,它们全都是Function对象,换言之,他们都是函数,但是他们都有一个特点——没有名字。所以我们把他们称作“匿名函数”。然而,正因为他们没有“名字”,我们也没有办法找到他们。这就引申了如何去调用一个匿名函数的问题了。
匿名函数的调用
要调用一个函数,我们必须要有方法定位它,引用它。所以,我们会需要帮它找一个名字。例如:
复制代码 代码如下:
var abc=function(x,y){
return x+y;
}
alert(abc(2,3)); // "5"
var abc=function(x,y){ return x+y; } alert(abc(2,3)); // "5"
上面的操作其实就等于换个方式去定义函数,这种用法是我们比较频繁遇到的。例如我们在设定一个DOM元素事件处理函数的时候,我们通常都不会为他们定名字,而是赋予它的对应事件引用一个匿名函数。
对匿名函数的调用其实还有一种做法,也就是我们看到的jQuery片段——使用()将匿名函数括起来,然后后面再加一对小括号(包含参数列表)。我们再看一下以下例子:
复制代码 代码如下:
alert((function(x,y){return x+y;})(2,3));// "5"
alert((new Function("x","y","return x*y;"))(2,3));// "6"
alert((function(x,y){return x+y;})(2,3));// "5" alert((new Function("x","y","return x*y;"))(2,3));// "6"
很多人或许会奇怪,为什么这种方法能成功调用呢?觉得这个应用奇怪的人就看一下我以下这段解释吧。
大家知道小括号的作用吗?小括号能把我们的表达式组合分块,并且每一块,也就是每一对小括号,都有一个返回值。这个返回值实际上也就是小括号中表达式的返回值。所以,当我们用一对小括号把匿名函数括起来的时候,实际上小括号对返回的,就是一个匿名函数的Function对象。因此,小括号对加上匿名函数就如同有名字的函数般被我们取得它的引用位置了。所以如果在这个引用变量后面再加上参数列表,就会实现普通函数的调用形式。
不知道以上的文字表述大家能不能看明白,如果还是理解不了的话,再看一下以下的代码试试吧。
复制代码 代码如下:
var abc=function(x,y){return x+y;};// 把匿名函数对象赋给abc
// abc的constructor就和匿名函数的constructor一样了。也就是说,两个函数的实现是一样的。
alert((abc).constructor==(function(x,y){return x+y;}).constructor);
var abc=function(x,y){return x+y;};// 把匿名函数对象赋给abc // abc的constructor就和匿名函数的constructor一样了。也就是说,两个函数的实现是一样的。 alert((abc).constructor==(function(x,y){return x+y;}).constructor);
PS:constructor是指创建对象的函数。也就是函数对象所代表的函数体。
总之,将其(被小括号包含的匿名函数)理解为括号表达式返回的函数对象,然后就可以对这个函数对象作正常的参数列表调用了。(前面这里犯了个错 误,只有函数表达式还是不能直接调用函数的,去掉匿名函数括号必须要伴随将表达式赋值。也就是(function(){alert(1)})()应该是与 a=function(){alert(1)}()等价,不能连a=都去掉。)
<body onload="alert('http://www.k686.com/');"> <script type="text/javascript"> void function() { alert('k686绿色软件'); }(); </script> </body>
还可以写成:
<body onload="alert('http://www.k686.com/');"> <script type="text/javascript"> (function() { alert('k686绿色软件'); })(); </script> </body>
从以上例子中可以看出,js匿名函数的执行是在 onload 之前,那么空函数是否可以取代onload的动作?
js匿名函数的写法还有n多种.
顾名思义,匿名函数就是没有实际名字的函数。例如,我们把上面的例子中,函数的名字去掉,再判断一下他是不是一个函数:
复制代码 代码如下:
alert(typeof function(){});// "function"
alert(typeof function(x,y){return x+y;});// "function"
alert(typeof new Function("x","y","return x*y;"))// "function"
alert(typeof function(){});// "function" alert(typeof function(x,y){return x+y;});// "function" alert(typeof new Function("x","y","return x*y;"))// "function"
我们可以很容易地看到,它们全都是Function对象,换言之,他们都是函数,但是他们都有一个特点——没有名字。所以我们把他们称作“匿名函数”。然而,正因为他们没有“名字”,我们也没有办法找到他们。这就引申了如何去调用一个匿名函数的问题了。
匿名函数的调用
要调用一个函数,我们必须要有方法定位它,引用它。所以,我们会需要帮它找一个名字。例如:
复制代码 代码如下:
var abc=function(x,y){
return x+y;
}
alert(abc(2,3)); // "5"
var abc=function(x,y){ return x+y; } alert(abc(2,3)); // "5"
上面的操作其实就等于换个方式去定义函数,这种用法是我们比较频繁遇到的。例如我们在设定一个DOM元素事件处理函数的时候,我们通常都不会为他们定名字,而是赋予它的对应事件引用一个匿名函数。
对匿名函数的调用其实还有一种做法,也就是我们看到的jQuery片段——使用()将匿名函数括起来,然后后面再加一对小括号(包含参数列表)。我们再看一下以下例子:
复制代码 代码如下:
alert((function(x,y){return x+y;})(2,3));// "5"
alert((new Function("x","y","return x*y;"))(2,3));// "6"
alert((function(x,y){return x+y;})(2,3));// "5" alert((new Function("x","y","return x*y;"))(2,3));// "6"
很多人或许会奇怪,为什么这种方法能成功调用呢?觉得这个应用奇怪的人就看一下我以下这段解释吧。
大家知道小括号的作用吗?小括号能把我们的表达式组合分块,并且每一块,也就是每一对小括号,都有一个返回值。这个返回值实际上也就是小括号中表达式的返回值。所以,当我们用一对小括号把匿名函数括起来的时候,实际上小括号对返回的,就是一个匿名函数的Function对象。因此,小括号对加上匿名函数就如同有名字的函数般被我们取得它的引用位置了。所以如果在这个引用变量后面再加上参数列表,就会实现普通函数的调用形式。
不知道以上的文字表述大家能不能看明白,如果还是理解不了的话,再看一下以下的代码试试吧。
复制代码 代码如下:
var abc=function(x,y){return x+y;};// 把匿名函数对象赋给abc
// abc的constructor就和匿名函数的constructor一样了。也就是说,两个函数的实现是一样的。
alert((abc).constructor==(function(x,y){return x+y;}).constructor);
var abc=function(x,y){return x+y;};// 把匿名函数对象赋给abc // abc的constructor就和匿名函数的constructor一样了。也就是说,两个函数的实现是一样的。 alert((abc).constructor==(function(x,y){return x+y;}).constructor);
PS:constructor是指创建对象的函数。也就是函数对象所代表的函数体。
总之,将其(被小括号包含的匿名函数)理解为括号表达式返回的函数对象,然后就可以对这个函数对象作正常的参数列表调用了。(前面这里犯了个错 误,只有函数表达式还是不能直接调用函数的,去掉匿名函数括号必须要伴随将表达式赋值。也就是(function(){alert(1)})()应该是与 a=function(){alert(1)}()等价,不能连a=都去掉。)
发表评论
-
webuploader实例php 配合fastDFS远程跨域上传回调的注意点
2016-08-02 19:31 3215webuploader上传控件是百度官方提供的一套基于ht ... -
bootstrap上传插件fileinput自动上传&上传成功回调的方法
2016-05-04 19:25 11214bootstrap上传插件fileinput功能非常强大, ... -
bootstrap上传插件fileinput自动上传&上传成功回调的方法
2016-05-03 20:16 21bootstrap上传插件fileinput功能非常强大,本 ... -
微信内置浏览器图片查看方式的原生实现(非jssdk)
2015-06-29 13:30 9916对于非公众平台网页,想调起图片预览组件,就跟公众号文章一样的 ... -
ajax提交表单的一些注意事项:解释为什么return false却依然提交
2012-02-02 19:10 2037ajax提交表单的一些注意事项.ajax提交表单是经常用到的. ... -
phpcms v9编辑器ckeditor数据恢复功能
2011-11-12 21:57 2713为phpcms v9的ckeditor编辑器开发的数据恢复功能 ... -
php+js抓取太平洋汽车网数据自动填表的一个实现
2011-11-11 22:34 2847主要是php输出json,js解析的模式 function ... -
jQuery二维码插件-改自MyQRCode,支持中文字符
2011-08-27 19:34 3785jQuery二维码插件-改自MyQRCode /** ... -
ajax中文参数乱码&ajax缓存的解决方法
2011-07-19 22:13 1505function ajax_get_xm(id,value ... -
jquery和multiple的前世今生-一点点代码收集
2011-03-17 13:43 1202<script type="text/ja ... -
对联广告代码_兼容jquery框架
2011-03-15 09:51 2575对联广告代码: suspendcode="< ... -
二维json格式的解法
2011-01-26 11:01 5034从淘宝数据魔方抓取来的行情简报,json格式如下: [[{& ... -
ckeditor编辑器Word文档粘贴自动去格式的解决方法
2011-01-12 22:36 7586ckeditor,个人感觉相当难用,默认版本会自动格式化从Wo ... -
ckeditor编辑器字体字体大小的调整
2011-01-05 19:55 2762ckeditor编辑器字体字体大小的调整,for phpcms ... -
select下拉框下拉跳转代码
2010-12-22 09:12 3272select下拉框下拉跳转代码 <select na ... -
jquery val() 返回undefined的问题
2010-12-14 17:07 2608jquery val() 返回undefined的问题. ... -
js动态显示时间_js 显示时间的一般写法
2010-12-08 15:43 1978js动态显示时间_js 显示时间的一般写法,数秒效果.不是那种 ... -
分享几条伪静态规则的写法 .htaccess
2010-11-29 10:47 2930RewriteEngine on ... -
js解析php返回的数组格式字符串
2010-11-28 23:43 3153ajax请求php返回一个数组格式的字符串,情况特殊不能修改p ... -
js中replace的用法 正则替换全部符合条件的字符串
2010-11-28 23:38 2262js中replace的用法. <script lan ...
相关推荐
我经常搞不清楚call,apply之间的区别,今天就记录一下,以免再忘了。 在javascript中,方法可以通过以下几种方式执行: 1.func(),这是最直接最常见的调用方式,也符合一般人的思维逻辑,但是在某些情况下有一些不足...
JavaScript 的独立测试间谍、存根和模拟。 适用于任何单元测试框架。 和以前一样,Sinon.JS 提供了帮助测试... 有两种类型的间谍:一些是匿名函数,而另一些则包装被测系统中已经存在的方法。 模拟应该只用于被测方法。
6.10使用匿名函数包装全局变量 第7章处理事件 7.0简介 7.1检测页面何时完成载入 7.2使用Event对象捕获鼠标点击事件的位置 7.3创建一个通用的、可重用的事件处理函数 7.4根据修改的条件来取消一个事件 ...
命名和匿名函数 Scala数组/ Seq作为JavaScript数组文字 Scala Map和匿名类作为JavaScript对象 如果,同时,for..in和for语句 Scala if作为表达式(例如val a = if(true)1 else 2) Scala匹配作为JavaScript开关 ...
5.9.1 匿名函数 150 5.9.2 this和$(this) 150 5.10 自动提取引用 152 5.10.1 概览 152 5.10.2 编程 153 第6章 动作/响应:让页面通过事件活动起来 156 6.1 什么是事件 156 6.1.1 鼠标事件 158 6.1.2 文档/窗口事件 ...
Javascript,简称为 JS,是一款能够运行在 JS解释器/引擎 中的脚本语言 JS解释器/引擎 是JS的运行环境: 1、独立安装的JS解释器 - NodeJS 2、嵌入在浏览器中的JS解释器 JS的发展史: 1、1992年 Nombas 开发...
整个js代码都放入jquery_validate_1.1.0.js中,通过一个匿名函数,jQuery的扩展方法,扩展方法为:initValidate函数,方法中带一个options配置参数,目前配置参数只有一个属性,{handlerUrl:},提供是否需要后台...
JavaScript:定义行为和动作 (基于对象和事件驱动的客户端脚本语言;也是一种广泛应用于客户端Web开发的脚本语言) 基于对象:网页中的一切...22.全局函数:不用任何对象点(.)就可以调用--可用于所有的 JavaScript ...
04 匿名函数 05 函数式编程介绍 06 函数式编程尾递归调用优化 07 map函数 08 map函数filter函数 09 reduce函数 10 map reduce filter总结 11 内置函数part1 第17章 01 课前吹牛 02 zip方法 03 max和min高级使用 04...
3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉...
●取得用户头像内置函数的安全问题。 前台功能: ●删除会员没有同时删除会员的好友信息。 ●在前台签写留言未设置隐藏,查看时显示该留言被设置了隐藏。 ●发送短消息页面,验证控件与“清除”按钮冲突。 ...
要映射URL到控制器需要一个Controller类来记录类名和方法,还要一个Map集合存储映射 URL -> Controller 在分发器初始化时通过反射读取控制器和其方法上指定URL添加到Map集合中.这需要一个注解@Mapping来指定URL ...
3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉...
3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉...
3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉...
3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉...
3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉...
3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉...
3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉...