javascript匿名函数实例分析


Posted in Javascript onNovember 18, 2014

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

摘要:

本文讲解的是javascript最基础也是最重要的东西--函数,之所以写这篇文章,是因为面试的时候问到了,也算是温故而知新了。

先上个例子,如果你看懂了,说明你已经理解了本文要讲的。

var f = (function() {
    function f() {return 10;}
    return f();
    function f() {return 20;}
    var f = 30;
})();
console.log(f);

javascript高级程序设计中这样描述函数--可以封装任意多条语句,而且可以在任何地方、任何时候调用执行。之前介绍过了strict mode,严格模式对函数有一些限制:

① 不能把函数命名为eval或arguments
② 不能把参数命名为eval或arguments
③ 不能出现两个命名参数同名的情况

发生以上情况就会导致语法错误,代码无法执行。

函数定义

函数定义分为三种

1、构造函数

var fun = new Funciton();

2、普通定义

function fun() {}

3、函数式定义

var fun = function() {};

这三种方式都可以定义函数fun。

参数

函数不介意传递进来多少个参数,也不在乎传进来的参数是什么数据类型。即便你定义的函数只接收两个参数,在调用这个函数时也未必一定要传递两个参数。可以传递一个、三个甚至不传递参数。原因是参数在内部是用一个数组来表示的。在函数体内可以通过arguments对象来访问参数数组,举个例子

function sayHi() {
    alert("Hello " + arguments[0] + "," + arguments[1]);
}

通过访问arguments对象的length属性来获知有多少个参数。函数的length会返回函数的参数个数。

注意:所有参数传递的都是值,不可能通过引用传递参数。

函数不能重载,只能重写

如果定义了两个名字相同的函数,则该名字只属于最后定义的函数,举个例子:

function add(num) {
    return num + 100;
}
function add(num) {
    return num + 200;
}
var result = add(100) //300

注意:函数在执行完return语句之后停止并立即退出。

函数种类

函数分为两种一种是有名函数,另一种是匿名函数。例如下面的有名函数

function fun() {
}

如果调用的话,只需要fun()就可以。

匿名函数,顾名思义就是没有函数名。例如

function() {}

函数调用是通过函数名来调用,匿名函数怎么调用呢?一种就是将匿名函数赋给一个变量,让这个变量充当函数名。另一种就是用()来调用,例如下面三种方法

1、(function() {return;}());

2、(function() {return;})();

3、function() {return;}();

例子:

(function(x, y) {
    ​alert(x + y);
})(2,3);
//alert(5)

2和3将会作为参数传递给x和y

下面就来讲讲最上面的例子,这个例子里面涉及到闭包,后面会说

首先定义一个变量f,然后赋值一个匿名函数,这里呢需要注意一点函数里所有变量的定义都会被前置,所以匿名函数里的执行顺序是

var f = (function() {
    ​var f = 30;
    function f() {return 10;}
    function f() {return 20;}
    return f();
})();

外面的变量f和里面的变量f不在同一个作用域内(闭包),所以互不影响。​因为函数不能重载,所以外面变量f=(function f() {return 20;})();,所以最终输出的是20。

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

Javascript 相关文章推荐
超级简单的图片防盗(HTML),好用
Apr 08 Javascript
jQuery checkbox全选/取消全选实现代码
Nov 14 Javascript
关于onScroll事件在IE6下每次滚动触发三次bug说明
Sep 21 Javascript
jQueryUI写一个调整分类的拖放效果实现代码
May 10 Javascript
JavaScript实现节点的删除与序号重建实例
Aug 05 Javascript
Node.js如何自动审核团队的代码
Jul 20 Javascript
Vue2实现组件props双向绑定
Dec 02 Javascript
javascript学习之json入门
Dec 22 Javascript
JS简单获取当前日期时间的方法(如:2017-03-29 11:41:10 星期四)
Mar 29 Javascript
深入浅析Node.js单线程模型
Jul 10 Javascript
js 获取json数组里面数组的长度实例
Oct 31 Javascript
原生JS实现轮播图效果
Oct 12 Javascript
Linux下使用jq友好的打印JSON技巧分享
Nov 18 #Javascript
删除Javascript Object中间的key
Nov 18 #Javascript
如何在MVC应用程序中使用Jquery
Nov 17 #Javascript
Jquery实现仿腾讯微博发表广播
Nov 17 #Javascript
JavaScript数组常用操作技巧汇总
Nov 17 #Javascript
jquery 实现返回顶部功能
Nov 17 #Javascript
超棒的响应式布局jQuery插件Freetile.js
Nov 17 #Javascript
You might like
使用php4加速网络传输
2006/10/09 PHP
PHP 页面跳转到另一个页面的多种方法方法总结
2009/07/07 PHP
php检查是否是ajax请求的方法
2015/04/16 PHP
php序列化函数serialize() 和 unserialize() 与原生函数对比
2015/05/08 PHP
javascript Zifa FormValid 0.1表单验证 代码打包下载
2007/06/08 Javascript
js刷新框架子页面的七种方法代码
2008/11/20 Javascript
Three.js源码阅读笔记(Object3D类)
2012/12/27 Javascript
JS截取字符串常用方法整理及使用示例
2013/10/18 Javascript
js获取指定的cookie的具体实现
2014/02/20 Javascript
JavaScript实现输入框(密码框)出现提示语
2016/01/12 Javascript
JavaScript反射与依赖注入实例详解
2018/05/29 Javascript
element-ui组件中input等的change事件中传递自定义参数
2019/05/22 Javascript
详解如何在Javascript和Sass之间共享变量
2019/11/13 Javascript
深入了解JS之作用域和闭包
2020/06/16 Javascript
python通过pil为png图片填充上背景颜色的方法
2015/03/17 Python
Python查询阿里巴巴关键字排名的方法
2015/07/08 Python
Python随手笔记第一篇(2)之初识列表和元组
2016/01/23 Python
python numpy函数中的linspace创建等差数列详解
2017/10/13 Python
记一次python 内存泄漏问题及解决过程
2018/11/29 Python
Django处理多用户类型的方法介绍
2019/05/18 Python
Python如何筛选序列中的元素的方法实现
2019/07/15 Python
python Gunicorn服务器使用方法详解
2019/07/22 Python
Numpy之reshape()使用详解
2019/12/26 Python
windows、linux下打包Python3程序详细方法
2020/03/17 Python
携程旅行网:中国领先的在线旅行服务公司
2017/02/17 全球购物
I.T中国官网:精选时尚设计师单品网购平台
2018/03/26 全球购物
营销总经理岗位职责
2014/02/02 职场文书
军训鉴定表自我鉴定
2014/02/13 职场文书
教师新年寄语
2014/04/03 职场文书
解除劳动合同协议书范本
2014/04/14 职场文书
奥巴马胜选演讲稿
2014/05/15 职场文书
祖国在我心中演讲稿450字
2014/09/05 职场文书
公安个人四风问题对照检查及整改措施
2014/10/28 职场文书
违纪检讨书
2015/01/27 职场文书
Vue接口封装的完整步骤记录
2021/05/14 Vue.js
Linux中一对多配置日志服务器的详细步骤
2022/07/23 Servers