浅谈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 相关文章推荐
js数组与字符串的相互转换方法
Jul 09 Javascript
JavaScript动态添加列的方法
Mar 25 Javascript
jQuery树形插件jquery.simpleTree.js用法分析
Sep 05 Javascript
vue制作加载更多功能的正确打开方式
Oct 12 Javascript
Agularjs妙用双向数据绑定实现手风琴效果
May 26 Javascript
基于angular2 的 http服务封装的实例代码
Jun 29 Javascript
webpack开发跨域问题解决办法
Aug 03 Javascript
微信小程序实现通过js操作wxml的wxss属性示例
Dec 06 Javascript
angularjs请求数据的方法示例
Aug 06 Javascript
node 文件上传接口的转发的实现
Sep 23 Javascript
使用Vue实现简单计算器
Feb 25 Javascript
详解Vue3使用axios的配置教程
Apr 29 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
Search Engine Friendly的URL设计
2006/10/09 PHP
Laravel框架表单验证详解
2014/09/04 PHP
PHP获取photoshop写入图片文字信息的方法
2015/03/31 PHP
thinkPHP的表达式查询用法详解
2016/09/14 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
关于Yii中模型场景的一些简单介绍
2019/09/22 PHP
兼容IE和FF的js脚本代码小结(比较常用)
2010/12/06 Javascript
jquery easyUI中ajax异步校验用户名
2016/08/19 Javascript
Bootstrap树形菜单插件TreeView.js使用方法详解
2016/11/01 Javascript
关于不同页面之间实现参数传递的几种方式讨论
2017/02/13 Javascript
JS中解决谷歌浏览器记住密码输入框颜色改变功能
2017/02/13 Javascript
微信小程序日历组件使用方法详解
2018/12/29 Javascript
JS学习笔记之数组去重实现方法小结
2019/05/29 Javascript
Vue路由守卫及页面登录权限控制的设置方法(两种)
2020/03/31 Javascript
JavaScript 正则应用详解【模式、欲查、反向引用等】
2020/05/13 Javascript
[47:53]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#2COL VS Spirit
2016/03/02 DOTA
用实例说明python的*args和**kwargs用法
2013/11/01 Python
Python cookbook(数据结构与算法)实现查找两个字典相同点的方法
2018/02/18 Python
Python Scrapy框架第一个入门程序示例
2020/02/05 Python
pycharm实现print输出保存到txt文件
2020/06/01 Python
CSS3地图动态实例代码(圆圈向外扩散)
2018/06/15 HTML / CSS
测试工程师职业规划书
2014/02/06 职场文书
三八活动策划方案
2014/08/17 职场文书
导航工程专业自荐信
2014/09/02 职场文书
2014校长四风问题对照检查材料思想汇报
2014/09/16 职场文书
工作散漫检讨书
2014/09/16 职场文书
预备党员思想汇报1000字
2014/10/07 职场文书
民间借贷借条范本
2015/05/25 职场文书
董存瑞观后感
2015/06/11 职场文书
欠条样本
2015/07/03 职场文书
2016年小学中秋节活动总结
2016/04/05 职场文书
Python-typing: 类型标注与支持 Any类型详解
2021/05/10 Python
python plt.plot bar 如何设置绘图尺寸大小
2021/06/01 Python
低门槛开发iOS、Android、小程序应用的前端框架详解
2021/10/16 Javascript
Spring Boot项目如何优雅实现Excel导入与导出功能
2022/06/10 Java/Android