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 相关文章推荐
jQuery学习2 选择器的使用说明
Feb 07 Javascript
浅析JavaScript中的隐式类型转换
Dec 05 Javascript
javascript排序函数实现数字排序
Jun 26 Javascript
angularjs学习笔记之三大模块(modal,controller,view)
Sep 26 Javascript
javascript动画之模拟拖拽效果篇
Sep 26 Javascript
微信小程序 Tab页切换更新数据
Jan 05 Javascript
Vue-Router实现页面正在加载特效方法示例
Feb 12 Javascript
JavaScript简介_动力节点Java学院整理
Jun 26 Javascript
JavaScript中BOM对象原理与用法分析
Jul 09 Javascript
微信小程序学习总结(二)样式、属性、模板操作分析
Jun 04 Javascript
原生js实现购物车
Sep 23 Javascript
vue中 this.$set的使用详解
Nov 17 Vue.js
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
php跨站攻击实例分析
2014/10/28 PHP
ThinkPHP打开验证码页面显示乱码的解决方法
2014/12/18 PHP
基于jquery的返回顶部效果(兼容IE6)
2011/01/17 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(五)可移动地图的实现
2013/01/23 Javascript
javascript截取字符串(通过substring实现并支持中英文混合)
2013/06/24 Javascript
JQuery的自定义事件代码,触发,绑定简单实例
2013/08/01 Javascript
Jquery中children与find之间的区别详细解析
2013/11/29 Javascript
原生JS实现仿淘宝网左侧商品分类菜单效果代码
2015/09/10 Javascript
实例讲解jquery与json的结合
2016/01/07 Javascript
Angularjs 滚动加载更多数据
2016/03/17 Javascript
JS中传递参数的几种不同方法比较
2017/01/20 Javascript
JavaScript表单验证的两种实现方法
2017/02/11 Javascript
JavaScript运动框架 解决防抖动问题、悬浮对联(二)
2017/05/17 Javascript
jquery实现倒计时小应用
2017/09/19 jQuery
JS中数组与对象的遍历方法实例小结
2018/08/14 Javascript
Node.js实现简单管理系统
2019/09/23 Javascript
[01:16]DOTA2小知识课堂 Ep.03 芒果树无伤肉山
2019/12/05 DOTA
[01:03:41]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第三场 2月2日
2021/03/11 DOTA
python使用Queue在多个子进程间交换数据的方法
2015/04/18 Python
利用Python命令行传递实例化对象的方法
2016/11/02 Python
浅谈python numpy中nonzero()的用法
2018/04/02 Python
python 实现Flask中返回图片流给前端展示
2020/01/09 Python
Python实现Canny及Hough算法代码实例解析
2020/08/06 Python
python正则表达式 匹配反斜杠的操作方法
2020/08/07 Python
css3新增颜色表示方式分享
2014/04/15 HTML / CSS
5分钟弄清楚html5的drag and drop(小结)
2019/04/10 HTML / CSS
美国在线精品家居网站:Burke Decor
2017/04/12 全球购物
ECCO俄罗斯官网:北欧丹麦鞋履及皮具品牌
2020/06/26 全球购物
个人自我剖析材料
2014/02/07 职场文书
政治学专业毕业生求职信
2014/08/11 职场文书
税务干部群众路线教育实践活动对照检查材料
2014/09/20 职场文书
运动会通讯稿50字
2015/07/20 职场文书
python中requests库+xpath+lxml简单使用
2021/04/29 Python
MySQL 视图(View)原理解析
2021/05/19 MySQL
MyBatis自定义SQL拦截器示例详解
2021/10/24 Java/Android
Win11怎么启动任务管理器?Win11启动任务管理器的几种方法
2021/11/23 数码科技