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 相关文章推荐
jquery 圆形旋转图片滚动切换效果
Jan 19 Javascript
动态加载js和css(外部文件)
Apr 17 Javascript
jQuery插件 selectToSelect使用方法
Oct 02 Javascript
javascript中String对象的slice()方法分析
Dec 20 Javascript
轻松掌握JavaScript中介者模式
Aug 26 Javascript
weUI应用之JS常用信息提示弹层的封装
Nov 21 Javascript
jQuery排序插件tableSorter使用方法
Feb 10 Javascript
vue cli webpack中使用sass的方法
Feb 24 Javascript
微信小程序实现蒙版弹窗效果
Nov 01 Javascript
VUE v-model表单数据双向绑定完整示例
Jan 21 Javascript
layui关闭层级、简单监听的实例
Sep 06 Javascript
vue+echarts实现中国地图流动效果(步骤详解)
Jan 27 Vue.js
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
ThinkPHP自动验证失败的解决方法
2011/06/09 PHP
PHP header()函数常用方法总结
2014/04/11 PHP
PHP采用自定义函数实现遍历目录下所有文件的方法
2014/08/19 PHP
PHP 抽象方法与抽象类abstract关键字介绍及应用
2014/10/16 PHP
PHP缩略图生成和图片水印制作
2017/01/07 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
在Yii2特定页面如何禁用调试工具栏Debug Toolbar详解
2017/08/07 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
PHP getDocNamespaces()函数讲解
2019/02/03 PHP
PHP判断当前使用的是什么浏览器(推荐)
2019/10/27 PHP
用js自动判断浏览器分辨率的代码
2007/01/28 Javascript
js判断日期时间有效性的方法
2015/10/24 Javascript
jquery在ie7下选择器的问题导致append失效的解决方法
2016/01/10 Javascript
全面解析JavaScript里的循环方法之forEach,for-in,for-of
2020/04/20 Javascript
jQuery实现手机自定义弹出输入框
2016/06/13 Javascript
JS 面向对象之继承---多种组合继承详解
2016/07/10 Javascript
bootstrap导航条实现代码
2016/12/28 Javascript
基于javascript实现最简单选项卡切换
2017/02/01 Javascript
浅谈NodeJs之数据库异常处理
2017/10/25 NodeJs
vue.js使用代理和使用Nginx来解决跨域的问题
2018/02/03 Javascript
vue 实现把路由单独分离出来
2020/08/13 Javascript
详解Python对JSON中的特殊类型进行Encoder
2019/07/15 Python
python PyAutoGUI 模拟鼠标键盘操作和截屏功能
2019/08/04 Python
Python  Django 母版和继承解析
2019/08/09 Python
基于python爬取有道翻译过程图解
2020/03/31 Python
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
2017/08/24 HTML / CSS
浅谈移动端网页图片预加载方案
2018/11/05 HTML / CSS
init进程的作用
2012/04/12 面试题
信息管理专业推荐信
2013/10/29 职场文书
租房协议书怎么写
2014/04/10 职场文书
论文评语大全
2014/04/29 职场文书
工会换届选举方案
2014/05/21 职场文书
职业规划实施方案
2014/06/10 职场文书
合伙购房协议样本
2014/10/06 职场文书
安全生产会议制度
2015/08/06 职场文书
SpringDataJPA实体类关系映射配置方式
2021/12/06 Java/Android