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 相关文章推荐
用javascript实现给图片加链接
Aug 15 Javascript
jquery $(document).ready() 与window.onload的区别
Dec 28 Javascript
jQuery 获取/设置/删除DOM元素的属性以a元素为例
May 23 Javascript
使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码
Apr 07 Javascript
JavaScript事件委托实例分析
May 26 Javascript
Vue数据驱动模拟实现2
Jan 11 Javascript
浅谈$_FILES数组为空的原因
Feb 16 Javascript
简单实现JS上传图片预览功能
Apr 14 Javascript
vue2 中如何实现动态表单增删改查实例
Jun 09 Javascript
微信小程序返回多级页面的实现方法
Oct 27 Javascript
vue-resource + json-server模拟数据的方法
Nov 02 Javascript
vue2.x集成百度UEditor富文本编辑器的方法
Sep 21 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
PHP实现获取FLV文件的时间
2015/02/10 PHP
CodeIgniter配置之autoload.php自动加载用法分析
2016/01/20 PHP
php基于curl主动推送最新内容给百度收录的方法
2016/10/14 PHP
php使用ftp实现文件上传与下载功能
2017/07/21 PHP
php写入mysql中文乱码的实例解决方法
2019/09/17 PHP
php生成HTML文件的类方法
2019/10/11 PHP
纯CSS3实现质感细腻丝滑按钮
2021/03/09 HTML / CSS
javascript Math.random()随机数函数
2009/11/04 Javascript
extjs DataReader、JsonReader、XmlReader的构造方法
2009/11/07 Javascript
Jquery 高亮显示文本中重要的关键字
2009/12/24 Javascript
禁止ajax缓存获取程序最新数据的方法
2013/11/19 Javascript
js对table的td进行相同内容合并示例详解
2013/12/27 Javascript
node.js中的fs.unlinkSync方法使用说明
2014/12/15 Javascript
javascript函数式编程程序员的工具集
2015/10/11 Javascript
使用jQuery操作HTML的table表格的实例解析
2016/03/13 Javascript
JS上传组件FileUpload自定义模板的使用方法
2016/05/10 Javascript
vue 粒子特效的示例代码
2017/09/19 Javascript
AngularJS实现的select二级联动下拉菜单功能示例
2017/10/25 Javascript
使用bootstrap实现下拉框搜索功能的实例讲解
2018/08/10 Javascript
在vue中安装使用vux的教程详解
2018/09/16 Javascript
vue-cli项目修改文件热重载失效的解决方法
2018/09/19 Javascript
angularJs select绑定的model取不到值的解决方法
2018/10/08 Javascript
JavaScript原型式继承实现方法
2019/11/06 Javascript
python脚本内运行linux命令的方法
2015/07/02 Python
利用Python破解验证码实例详解
2016/12/08 Python
NetworkX之Prim算法(实例讲解)
2017/12/22 Python
Numpy 改变数组维度的几种方法小结
2018/08/02 Python
了解不常见但是实用的Python技巧
2019/05/23 Python
Python使用ElementTree美化XML格式的操作
2020/03/06 Python
北欧最好的童装网上商店:Babyshop
2019/09/15 全球购物
建筑班组长岗位职责
2014/01/02 职场文书
电子商务求职信
2014/06/15 职场文书
超市仓管员岗位职责范本
2014/09/18 职场文书
2014年企业团支部工作总结
2014/12/10 职场文书
如何利用golang运用mysql数据库
2022/03/13 Golang
Golang连接并操作MySQL
2022/04/14 MySQL