浅谈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之软键盘实现(js源码)
Jan 30 Javascript
JavaScript使用cookie
Feb 02 Javascript
js 实现无缝滚动 兼容IE和FF
Jul 15 Javascript
js 判断脚本加载完毕的代码
Jul 13 Javascript
整理的比较全的event对像在ie与firefox浏览器中的区别
Nov 25 Javascript
jquery实现点击弹出带标题栏的弹出层(从右上角飞入)效果
Sep 19 Javascript
WebPack基础知识详解
Jan 16 Javascript
jQuery实现的简单悬浮层功能完整实例
Jan 23 Javascript
javascript 中关于array的常用方法详解
May 05 Javascript
详解js静态资源文件请求的处理
Aug 01 Javascript
vue 指令和过滤器的基本使用(品牌管理案例)
Nov 04 Javascript
jQuery事件模型默认行为执行顺序及trigger()与 triggerHandler()比较实例分析
Apr 30 jQuery
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
文件系统基本操作类
2006/11/23 PHP
PHP pathinfo()获得文件的路径、名称等信息说明
2011/09/13 PHP
PHP获取栏目的所有子级和孙级栏目的ID号示例
2014/04/01 PHP
深入浅析PHP7.0新特征(五大新特征)
2015/10/29 PHP
PHP实现生成带背景的图形验证码功能
2016/10/03 PHP
PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
2017/02/10 PHP
让ThinkPHP的模板引擎达到最佳效率的方法详解
2017/03/14 PHP
利用PHP实现开心消消乐的算法示例
2017/10/12 PHP
PHP排序算法之希尔排序(Shell Sort)实例分析
2018/04/20 PHP
php封装的page分页类完整实例代码
2020/02/01 PHP
jquery 新浪网易的评论块制作
2010/07/01 Javascript
js 处理数组重复元素示例代码
2013/12/27 Javascript
jQuery实现复选框成对选择及对应取消的方法
2015/03/03 Javascript
JS实现图片延迟加载并淡入淡出效果的简单方法
2016/08/25 Javascript
通过扫描二维码打开app的实现代码
2016/11/10 Javascript
JS中使用textPath实现线条上的文字
2017/12/25 Javascript
React全家桶环境搭建过程详解
2018/05/18 Javascript
vue学习笔记五:在vue项目里面使用引入公共方法详解
2019/04/04 Javascript
详解小程序设置缓存并且不覆盖原有数据
2019/04/15 Javascript
详解vue+axios给开发环境和生产环境配置不同的接口地址
2019/08/16 Javascript
使用vue-cli3+typescript的项目模板创建工程的教程
2020/02/28 Javascript
[42:11]TNC vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python采用requests库模拟登录和抓取数据的简单示例
2014/07/05 Python
django限制匿名用户访问及重定向的方法实例
2018/02/07 Python
python 除法保留两位小数点的方法
2018/07/16 Python
python 创建一维的0向量实例
2019/12/02 Python
python matlab库简单用法讲解
2020/12/31 Python
Canal官网:巴西女性时尚品牌
2019/10/16 全球购物
俄罗斯香水和化妆品网上商店:NOTINO.ru
2019/12/17 全球购物
企业门卫岗位职责
2013/12/12 职场文书
关于人生的感言
2014/01/17 职场文书
一月红领巾广播稿
2014/02/11 职场文书
公共机构节能宣传周活动总结
2014/07/09 职场文书
正风肃纪剖析材料范文
2014/10/10 职场文书
2015年个人审计工作总结
2015/04/07 职场文书
2015安全保卫工作总结
2015/04/25 职场文书