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 相关文章推荐
IE/FireFox具备兼容性的拖动代码
Aug 13 Javascript
关于IE、Firefox、Opera页面呈现异同 写脚本很痛苦
Aug 28 Javascript
bootstrap table实例详解
Jan 06 Javascript
Node.js中的http请求客户端示例(request client)
May 04 Javascript
微信小程序搜索组件wxSearch实例详解
Jun 08 Javascript
基于vue cli 通过命令行传参实现多环境配置
Jul 12 Javascript
JavaScript事件发布/订阅模式原理与用法分析
Aug 21 Javascript
详解关于Vuex的action传入多个参数的问题
Feb 22 Javascript
element-ui中Table表格省市区合并单元格的方法实现
Aug 07 Javascript
Python版实现微信公众号扫码登陆
May 28 Javascript
vue项目打包为APP,静态资源正常显示,但API请求不到数据的操作
Sep 12 Javascript
JavaScript圣杯布局与双飞翼布局实现案例详解
Aug 05 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
PHPlet在Windows下的安装
2006/10/09 PHP
PHP URL路由类实例
2013/11/12 PHP
CI(CodeIgniter)框架中的增删改查操作
2014/06/10 PHP
php采用ajax数据提交post与post常见方法总结
2014/11/10 PHP
用JavaScript事件串连执行多个处理过程的方法
2007/03/09 Javascript
用javascript作一个通用向导说明
2011/08/30 Javascript
js 定时器setTimeout无法调用局部变量的解决办法
2013/11/28 Javascript
html5+javascript制作简易画板附图
2014/04/25 Javascript
浅谈JavaScript Math和Number对象
2015/01/26 Javascript
js判断图片加载完成后获取图片实际宽高的方法
2016/02/25 Javascript
Bootstrap媒体对象的实现
2016/05/01 Javascript
基于Echarts 3.19 制作常用的图形(非静态)
2016/05/19 Javascript
jquery输入数字随机抽奖特效的简单实现代码
2016/06/10 Javascript
PhotoSwipe异步动态加载图片方法
2016/08/25 Javascript
解析NodeJs的调试方法
2016/12/11 NodeJs
简单实现node.js图片上传
2016/12/18 Javascript
详谈js的变量提升以及使用方法
2018/10/06 Javascript
js中实例与对象的区别讲解
2019/01/21 Javascript
vue axios post发送复杂对象问题
2019/06/04 Javascript
python 生成目录树及显示文件大小的代码
2009/07/23 Python
python中stdout输出不缓存的设置方法
2014/05/29 Python
Python合并字典键值并去除重复元素的实例
2016/12/18 Python
Python查找第n个子串的技巧分享
2018/06/27 Python
Python设计模式之代理模式实例详解
2019/01/19 Python
python 求一个列表中所有元素的乘积实例
2019/06/11 Python
树莓派+摄像头实现对移动物体的检测
2019/06/22 Python
python将三维数组展开成二维数组的实现
2019/11/30 Python
wxpython多线程防假死与线程间传递消息实例详解
2019/12/13 Python
中国梦的演讲稿
2014/01/08 职场文书
大学生村官事迹材料
2014/01/21 职场文书
网上卖盒饭创业计划书
2014/01/26 职场文书
2014班子“三严三实”对照检查材料思想汇报
2014/09/18 职场文书
陪护人员误工证明
2015/06/24 职场文书
大队委员竞选稿
2015/11/20 职场文书
mysql主从复制的实现步骤
2021/10/24 MySQL
CSS实现渐变色边框(Gradient borders)的5种方法
2022/03/25 HTML / CSS