浅谈JavaScript function函数种类


Posted in Javascript onDecember 29, 2014

本篇主要介绍普通函数、匿名函数、闭包函数

1.普通函数介绍
1.1 示例

function ShowName(name) {

    alert(name);

}

1.2 Js中同名函数的覆盖

在Js中函数是没有重载,定义相同函数名、不同参数签名的函数,后面的函数会覆盖前面的函数。调用时,只会调用后面的函数。

var n1 = 1;

 

function add(value1) {

    return n1 + 1;

}

alert(add(n1));//调用的是下面的函数,输出:3

 

function add(value1, value2) {

    return value1 + 2;

}

alert(add(n1));//输出:3

1.3 arguments对象

arguments 类似于C#的params,操作可变参数:传入函数的参数数量大于定义时的参数数量。

function showNames(name) {

    alert(name);//张三

    for (var i = 0; i < arguments.length; i++) {

        alert(arguments[i]);//张三、李四、王五

    }

}

showNames('张三','李四','王五');

1.4 函数的默认范围值

若函数没有指明返回值,默认返回的是'undefined'

function showMsg() {

}

alert(showMsg());//输出:undefined

2.匿名函数

2.1 变量匿名函数

2.1.1 说明
可以把函数赋值给变量、事件。

2.1.2 示例

//变量匿名函数,左侧可以为变量、事件等

var anonymousNormal = function (p1, p2) {

    alert(p1+p2);

}

anonymousNormal(3,6);//输出9

2.1.3 适用场景
①避免函数名污染。若先声明个带名称的函数,再赋值给变量或事件,就造成了函数名的滥用。

2.2 无名称匿名函数

2.2.1 说明
即在函数声明时,在后面紧跟参数。Js语法解析此函数时,里面代码立即执行。

2.2.2 示例

(function (p1) {

    alert(p1);

})(1);

2.2.3 适用场景
①只需执行一次的。如浏览器加载完,只需要执行一次且后面不执行的功能。

3. 闭包函数

3.1 说明

 假设,函数A内部声明了个函数B,函数B引用了函数B之外的变量,并且函数A的返回值为函数B的引用。那么函数B就是闭包函数。

3.2 示例

3.2.1 示例1:全局引用与局部引用

function funA() {

    var i = 0;

    function funB() { //闭包函数funB

        i++;

        alert(i)

    }

    return funB;

}

var allShowA = funA(); //全局变量引用:累加输出1,2,3,4等

 

function partShowA() {

    var showa = funA();//局部变量引用:只输出1

    showa();

}

allShowA是个全局变量,引用了函数funA。重复运行allShowA(),会输出1,2,3,4等累加的值。

执行函数partShowA(),因为内部只声明了局部变量showa来引用funA,执行完毕后因作用域的关系,释放showa占用的资源。

闭包的关键就在于作用域:全局变量占有的资源只有当页面变换或浏览器关闭后才会释放。var allShowA = funA() 时,相当于allShowA引用了funB(),从而使funB()里的资源不被GC回收,因此funA()里的资源也不会。

3.2.2 示例2:有参闭包函数

function funA(arg1,arg2) {

    var i = 0;

    function funB(step) {

        i = i + step;

        alert(i)

    }

    return funB;

}

var allShowA = funA(2, 3); //调用的是funA arg1=2,arg2=3

allShowA(1);//调用的是funB step=1,输出 1

allShowA(3);//调用的是funB setp=3,输出 4

3.2.3 示例3:父函数funA内的变量共享

function funA() {

    var i = 0;

   function funB() {

        i++;

        alert(i)

    }

    allShowC = function () {// allShowC引用匿名函数,与funB共享变量i

        i++;

        alert(i)

    }

    return funB;

}

var allShowA = funA();

var allShowB = funA();//allShowB引用了funA,allShowC在内部重新进行了绑定,与allShowB共享变量i

3.3 适用场景

①保证函数funA内里的变量安全,因为外部不能直接访问funA的变量。

小伙伴们是否对javascript的function函数有所了解了呢,有疑问就给我留言吧。

Javascript 相关文章推荐
extJs 下拉框联动实现代码
Apr 09 Javascript
Javascript实现的简单右键菜单类
Sep 23 Javascript
javascript的理解及经典案例分析
May 20 Javascript
JS控制文本域只读或可写属性的方法
Jun 24 Javascript
玩转NODE.JS(四)-搭建简单的聊天室的代码
Nov 11 Javascript
JavaScript使用FileReader实现图片上传预览效果
Mar 27 Javascript
JS实现把一个页面层数据传递到另一个页面的两种方式
Aug 13 Javascript
详解webpack2异步加载套路
Sep 14 Javascript
详解关于element级联选择器数据回显问题
Feb 20 Javascript
ES6 Generator基本使用方法示例
Jun 06 Javascript
Element Tooltip 文字提示的使用示例
Jul 26 Javascript
Vue中避免滥用this去读取data中数据
Mar 02 Vue.js
JavaScript异步加载浅析
Dec 28 #Javascript
JavaScript设计模式之工厂方法模式介绍
Dec 28 #Javascript
JavaScript设计模式之抽象工厂模式介绍
Dec 28 #Javascript
JavaScript设计模式之单件模式介绍
Dec 28 #Javascript
理解javascript回调函数
Dec 28 #Javascript
JavaScript设计模式之建造者模式介绍
Dec 28 #Javascript
如何编写高质量JS代码
Dec 28 #Javascript
You might like
11个PHP 分页脚本推荐
2011/08/15 PHP
php检查字符串中是否包含7位GSM字符的方法
2015/03/17 PHP
PHP回调函数概念与用法实例分析
2017/11/03 PHP
PHP PDOStatement::closeCursor讲解
2019/01/30 PHP
基于OO的动画附加插件,可以实现弹跳、渐隐等动画效果 分享
2013/06/24 Javascript
jquery做的一个简单的屏幕锁定提示框
2014/03/26 Javascript
jQuery动态创建html元素的常用方法汇总
2014/09/05 Javascript
jQuery prototype冲突的2种解决方法(附demo示例下载)
2016/01/21 Javascript
第二章之Bootstrap 页面排版样式
2016/04/25 Javascript
js获取Html元素的实际宽度高度的方法
2016/05/19 Javascript
原生js实现打字动画游戏
2017/02/04 Javascript
Vue slot用法(小结)
2018/10/22 Javascript
通过原生vue添加滚动加载更多功能
2019/11/21 Javascript
[01:20]DOTA2 2017国际邀请赛冠军之路无止竞
2017/06/19 DOTA
python中尾递归用法实例详解
2015/04/28 Python
Python书单 不将就
2017/07/11 Python
python多线程调用exit无法退出的解决方法
2019/02/18 Python
python字符串和常用数据结构知识总结
2019/05/21 Python
python读写Excel表格的实例代码(简单实用)
2019/12/19 Python
python之生成多层json结构的实现
2020/02/27 Python
Python求凸包及多边形面积教程
2020/04/12 Python
Python实现aes加密解密多种方法解析
2020/05/15 Python
Python类的继承super相关原理解析
2020/10/22 Python
html5是什么_动力节点Java学院整理
2017/07/07 HTML / CSS
Artist Guitars新西兰:乐器在线商店
2017/09/17 全球购物
大韩航空官方网站:Korean Air
2017/10/25 全球购物
学习党的群众路线实践活动思想汇报
2014/09/12 职场文书
2014年电话销售工作总结
2014/12/01 职场文书
小学生差生评语
2014/12/29 职场文书
本科毕业论文指导教师评语
2014/12/30 职场文书
质量保证书怎么写
2015/02/27 职场文书
大学团日活动总结书
2015/05/11 职场文书
教师聘用意向书
2015/05/11 职场文书
spring cloud 配置中心native配置方式
2021/09/25 Java/Android
分析SQL窗口函数之排名窗口函数
2022/04/21 Oracle
VUE解决跨域问题Access to XMLHttpRequest at
2022/05/06 Vue.js