浅谈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 checkbox 全选/反选及批量删除
Apr 28 Javascript
用jquery实现等比例缩放图片效果插件
Jul 24 Javascript
ie6下png图片背景不透明的解决办法使用js实现
Jan 11 Javascript
Bootstrap每天必学之面板
Nov 30 Javascript
javascript弹性运动效果简单实现方法
Jan 08 Javascript
JS字符串的切分用法实例
Feb 22 Javascript
jQuery的Each比JS原生for循环性能慢很多的原因
Jul 05 Javascript
基于JavaScript实现弹幕特效
Aug 27 Javascript
对Layer弹窗使用及返回数据接收的实例详解
Sep 26 Javascript
node.JS事件机制与events事件模块的使用方法详解
Feb 06 Javascript
vue实现导航标题栏随页面滚动渐隐渐显效果
Mar 12 Javascript
JavaScript阻止事件冒泡的方法
Dec 06 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
3
2006/10/09 PHP
PHP的开发框架的现状和展望
2007/03/16 PHP
深入理解PHP之数组(遍历顺序)  Laruence原创
2012/06/13 PHP
PHP利用APC模块实现大文件上传进度条的方法
2015/10/29 PHP
js导出table到excel同时兼容FF和IE示例
2013/09/03 Javascript
js 定时器setTimeout无法调用局部变量的解决办法
2013/11/28 Javascript
Javascript 多物体运动的实现
2014/12/24 Javascript
JS实现可拖曳、可关闭的弹窗效果
2015/09/26 Javascript
JavaScript缓冲运动实现方法(2则示例)
2016/01/08 Javascript
详解支持Angular 2的表格控件
2017/01/19 Javascript
Ajax异步获取html数据中包含js方法无效的解决方法
2017/02/20 Javascript
关于JavaScript的单双引号嵌套问题
2017/08/20 Javascript
Vue-路由导航菜单栏的高亮设置方法
2018/03/17 Javascript
使用vue-router beforEach实现判断用户登录跳转路由筛选功能
2018/06/25 Javascript
javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
2018/08/01 Javascript
微信小程序自定义可滑动日历界面
2018/12/28 Javascript
Koa日志中间件封装开发详解
2019/03/09 Javascript
Vue退出登录时清空缓存的实现
2019/11/12 Javascript
超简单的微信小程序轮播图
2019/11/22 Javascript
js实现左右轮播图
2020/01/09 Javascript
[01:01:18]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#2COL VS LGD
2016/03/03 DOTA
使用Python写个小监控
2016/01/27 Python
对python requests的content和text方法的区别详解
2018/10/11 Python
python 瀑布线指标编写实例
2020/06/03 Python
纯CSS打造(无图像无js)的非常流行的讲话(语音)气泡效果
2012/12/28 HTML / CSS
新加坡最受追捧的体验平台:Hapz
2018/01/01 全球购物
Sephora丝芙兰印尼官方网站:购买化妆品和护肤品
2018/07/02 全球购物
Belvilla法国:休闲度假房屋出租
2020/10/03 全球购物
周年庆典邀请函范文
2014/01/24 职场文书
初中作文评语大全
2014/04/23 职场文书
员工安全承诺书
2014/05/22 职场文书
教师党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
小学音乐课教学反思
2016/02/18 职场文书
Python使用Kubernetes API访问集群
2021/05/30 Python
MySQL学习之基础操作总结
2022/03/19 MySQL
Android基于Fresco实现圆角和圆形图片
2022/04/01 Java/Android