浅谈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 相关文章推荐
javascript中巧用“闭包”实现程序的暂停执行功能
Apr 04 Javascript
JavaScript中访问节点对象的方法有哪些如何使用
Sep 24 Javascript
使用JS取得焦点(focus)元素代码
Mar 22 Javascript
AngularJS入门教程之与服务器(Ajax)交互操作示例【附完整demo源码下载】
Nov 02 Javascript
JavaScript 栈的详解及实例代码
Jan 22 Javascript
Vue.Draggable实现拖拽效果
Jul 29 Javascript
JQuery form表单提交前验证单选框是否选中、删除记录时验证经验总结(整理)
Jun 09 jQuery
微信小程序页面滑动屏幕加载数据效果
Nov 16 Javascript
vue基于mint-ui的城市选择3级联动的示例
Oct 25 Javascript
Js判断H5上下滑动方向及滑动到顶部和底部判断的示例代码
Nov 15 Javascript
JavaScript对象属性操作实例解析
Feb 04 Javascript
微信小程序之导航滑块视图容器功能的实现代码(简单两步)
Jun 19 Javascript
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
PHP中文件缓存转内存缓存的方法
2011/12/06 PHP
PHP中实现接收多个name相同但Value不相同表单数据实例
2015/02/03 PHP
PHP微信开发用Cache 解决数据缓存
2016/07/11 PHP
Yii输入正确验证码却验证失败的解决方法
2017/06/06 PHP
Laravel学习教程之model validation的使用示例
2017/10/23 PHP
PHP基于关联数组20行代码搞定约瑟夫问题示例
2017/11/07 PHP
JS 实现完美include载入实现代码
2010/08/05 Javascript
javascript 进阶篇3 Ajax 、JSON、 Prototype介绍
2012/03/14 Javascript
JS下载文件|无刷新下载文件示例代码
2014/04/17 Javascript
Javascript实现计算个人所得税
2015/05/10 Javascript
js数组常见操作及数组与字符串相互转化实例详解
2015/11/10 Javascript
jquery特效 点击展示与隐藏全文
2015/12/09 Javascript
ES6中非常实用的新特性介绍
2016/03/10 Javascript
vue.js+boostrap项目实践(案例详解)
2016/09/21 Javascript
深入学习jQuery中的data()
2016/12/22 Javascript
js实现选项卡内容切换以及折叠和展开效果【推荐】
2017/01/08 Javascript
vue实现点击展开点击收起效果
2018/04/27 Javascript
js+canvas实现刮刮奖功能
2020/09/13 Javascript
python函数缺省值与引用学习笔记分享
2013/02/10 Python
Python易忽视知识点小结
2015/05/25 Python
python实现数据预处理之填充缺失值的示例
2017/12/22 Python
python 制作自定义包并安装到系统目录的方法
2018/10/27 Python
Pytorch实现的手写数字mnist识别功能完整示例
2019/12/13 Python
介绍一下Java中的static关键字
2012/05/12 面试题
一百多行代码实现react拖拽hooks
2021/03/23 Javascript
护士检查书
2014/01/17 职场文书
班主任工作经验交流材料
2014/05/13 职场文书
学校搬迁方案
2014/06/15 职场文书
小学教师师德整改措施
2014/09/29 职场文书
校园会短篇的广播稿
2014/10/21 职场文书
个人欠款协议书范本2014
2014/11/02 职场文书
党的群众路线教育实践活动心得体会(乡镇)
2014/11/03 职场文书
青年教师个人总结
2015/02/11 职场文书
校长师德表现自我评价
2015/03/04 职场文书
详解Java分布式事务的 6 种解决方案
2021/06/26 Java/Android
Arthas排查Kubernetes中应用频繁挂掉重启异常
2022/02/28 MySQL