JavaScript匿名函数用法分析


Posted in Javascript onFebruary 13, 2015

本文实例讲述了JavaScript匿名函数用法。分享给大家供大家参考。具体如下:

一、定义一个函数

在JavaScript中,可以通过“函数声明”和“函数表达式”来定义一个函数,比如

1、通过“函数声明”来定义一个函数

function t1(){}

2、通过“函数表达式”来定义一个函数

t2 = function(){}

但是两种方式定义函数,效果是不同的
t1是函数声明,‘词法分析'时,AO.t1 = function(){},-------------在‘词法分析'阶段就发挥作用
t2是赋值操作,‘运行'时,AO.t2 = function(){},值是右边的表达式返回的结果,------在‘运行'阶段才发挥作用

二、匿名函数

在JavaScript中,小括号()里的语句当做表达式来执行,在上面说到,可以使用“函数表达式”来定义一个函数,那么,我们可以在()内定义一个函数,如

(function t3(){alert(' i am t3');})

如果该函数没有使用名字,修改如下

(function(){alert(' i am t3');})

包含在()内的语句既然是表达式,就有返回值,(function(){alert(' i am t3');})的返回值就是定义的函数,可以立即调用,如

(function(){alert(' i am t3');})()

因此,在小括号()内定义一个没有名字的函数,该函数称为匿名函数。这种手法,匿名函数,立即执行,不污染全局,称为 立即执行函数表达式。

三、jquery就是一个匿名函数

jquery的代码就是封装在一个匿名函数中,这是jquery最外层的代码:

(function(window,undefined){})(window);//立即调用

但是jquery为什么传window,不传undefined呢?

答:传window是为了查找速度,减少查询变量的时间。比如下面这段js代码

function(){
 function(){
   function(){
  function(){
   document.getElementById();
//这个document将会沿作用域层层上找,直到最外层window全局。
  }
   }
 }
}

jquery就是为了加快内部查找局部变量的速度,而直接把window以参数形式传进来, 这样window就在jquery内部AO上。

不传undefined是为了安全,因为在低版本的IE,FF中,undefined竟然可以重新赋值,如 undefined=3;

声明局部变量undefined(名字是undefined),同时,又不传参,值自然就是undefined

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
理解Javascript_01_理解内存分配原理分析
Oct 11 Javascript
关于ExtJS4.1:快捷键支持的问题
Apr 24 Javascript
jquery获取子节点和父节点的示例代码
Sep 10 Javascript
使用 js+正则表达式为关键词添加链接
Nov 11 Javascript
js只执行1次的函数示例
Jul 20 Javascript
全面了解构造函数继承关键apply call
Jul 26 Javascript
vue.js学习之递归组件
Dec 13 Javascript
Javascript中数组去重与拍平的方法示例
Feb 03 Javascript
Angularjs 与 bower安装和使用详解
May 11 Javascript
实例详解Vue项目使用eslint + prettier规范代码风格
Aug 20 Javascript
Vue.Draggable拖拽功能的配置使用方法
Jul 29 Javascript
JavaScript数据结构与算法之检索算法示例【二分查找法、计算重复次数】
Feb 22 Javascript
js实现进度条的方法
Feb 13 #Javascript
动态加载js的方法汇总
Feb 13 #Javascript
jQuery EasyUI datagrid实现本地分页的方法
Feb 13 #Javascript
jQuery向后台传入json格式数据的方法
Feb 13 #Javascript
浅谈轻量级js模板引擎simplite
Feb 13 #Javascript
js实现拖拽效果
Feb 12 #Javascript
jQuery多个input求和的实现方法
Feb 12 #Javascript
You might like
php中防止SQL注入的最佳解决方法
2013/04/25 PHP
php IP转换整形(ip2long)的详解
2013/06/06 PHP
浅谈PHP中new self()和new static()的区别
2017/08/11 PHP
jquery按回车提交数据的代码示例
2013/11/05 Javascript
JS 去除Array中的null值示例代码
2013/11/20 Javascript
借助javascript代码判断网页是静态还是伪静态
2014/05/05 Javascript
javascript实现检验的各种规则
2015/07/31 Javascript
jquery实现简单实用的弹出层效果代码
2015/10/15 Javascript
学习JavaScript设计模式之迭代器模式
2016/01/19 Javascript
js利用正则表达式检验输入内容是否为网址
2016/07/05 Javascript
JavaScript蒙板(model)功能的简单实现代码
2016/08/04 Javascript
获取今天,昨天,本周,上周,本月,上月时间(实例分享)
2017/01/04 Javascript
Bootstrap fileinput文件上传组件使用详解
2017/06/06 Javascript
js 显示日期时间的实例(时间过一秒加1)
2017/10/25 Javascript
详解Angular2学习笔记之Html属性绑定
2018/01/03 Javascript
vue里面v-bind和Props 利用props绑定动态数据的方法
2018/08/27 Javascript
vue.js+element-ui动态配置菜单的实例
2018/09/07 Javascript
npm scripts 使用指南详解
2018/10/08 Javascript
微信小程序实现swiper切换卡内嵌滚动条不显示的方法示例
2018/12/20 Javascript
解决vue scoped scss 无效的问题
2020/09/04 Javascript
DWR内存兼容及无法调用问题解决方案
2020/10/16 Javascript
[03:11]2014DOTA2国际邀请赛-VG掉入败者组 独家专访357
2014/07/19 DOTA
[55:25]VGJ.T vs Optic Supermajor小组赛D组 BO3 第三场 6.3
2018/06/04 DOTA
[44:33]EG vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
使用Python获取CPU、内存和硬盘等windowns系统信息的2个例子
2014/04/15 Python
解决在pycharm运行代码,调用CMD窗口的命令运行显示乱码问题
2019/08/23 Python
你应该知道的Python3.6、3.7、3.8新特性小结
2020/05/12 Python
Python3爬虫中pyspider的安装步骤
2020/07/29 Python
CSS3属性background-size使用指南
2014/12/09 HTML / CSS
网上开商店的创业计划书
2014/01/19 职场文书
幼儿园教师培训方案
2014/02/04 职场文书
消防安全标语
2014/06/07 职场文书
思想道德自我评价2015
2015/03/09 职场文书
党员转正申请报告
2015/05/15 职场文书
锦旗赠语
2015/06/23 职场文书
写好Python代码的几条重要技巧
2021/05/21 Python