浅谈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 自定义类型方法小结
Mar 02 Javascript
js通过八个点 拖动改变div大小的实现方法
Mar 05 Javascript
JavaScript实现网站访问次数统计代码
Aug 12 Javascript
easyui中combotree循环获取父节点至根节点并输出路径实现方法
Nov 10 Javascript
利用BootStrap的Carousel.js实现轮播图动画效果
Dec 21 Javascript
基于vue实现swipe轮播组件实例代码
May 24 Javascript
jQuery实现碰到边缘反弹的动画效果
Feb 24 jQuery
vue.js template模板的使用(仿饿了么布局)
Aug 13 Javascript
详解ES6 系列之异步处理实战
Oct 26 Javascript
IDEA安装vue插件图文详解
Sep 26 Javascript
如何基于原生javaScript生成带图片的二维码
Nov 21 Javascript
ES6学习教程之Promise用法详解
Nov 22 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新手上路(五)
2006/10/09 PHP
php实现自动获取生成文章主题关键词功能的深入分析
2013/06/03 PHP
php 使用curl模拟登录人人(校内)网的简单实例
2016/06/06 PHP
yii框架redis结合php实现秒杀效果(实例代码)
2017/10/26 PHP
Laravel如何使用Redis共享Session
2018/02/23 PHP
PDO::rollBack讲解
2019/01/29 PHP
PHP addcslashes()函数讲解
2019/02/03 PHP
利用jquery动画特效和css打造的侧边弹出垂直导航
2014/04/04 Javascript
js设置控件的隐藏与显示的两种方法
2014/08/21 Javascript
jQuery 选择器详解
2015/01/19 Javascript
基于jQuery+JSON的省市二三级联动效果
2015/06/05 Javascript
SelectPage v2.4 发布新增纯下拉列表和关闭分页功能
2017/09/07 Javascript
bmob js-sdk 在vue中的使用教程
2018/01/21 Javascript
详解a标签添加onclick事件的几种方式
2019/03/29 Javascript
微信小程序实现的绘制table表格功能示例
2019/04/26 Javascript
基于ssm框架实现layui分页效果
2019/07/27 Javascript
在layui.use 中自定义 function 的正确方法
2019/09/16 Javascript
详解elementUI中input框无法输入的问题
2020/04/27 Javascript
简单的Python的curses库使用教程
2015/04/11 Python
python实现的简单窗口倒计时界面实例
2015/05/05 Python
教你使用python实现微信每天给女朋友说晚安
2018/03/23 Python
Python简单实现两个任意字符串乘积的方法示例
2018/04/12 Python
tensorflow学习笔记之简单的神经网络训练和测试
2018/04/15 Python
对IPython交互模式下的退出方法详解
2019/02/16 Python
pandas按行按列遍历Dataframe的几种方式
2019/10/23 Python
python 消除 futureWarning问题的解决
2019/12/25 Python
python中pivot()函数基础知识点
2021/01/03 Python
html5 音乐播放器 audio 标签使用概述
2013/07/15 HTML / CSS
输入N,打印N*N矩阵
2012/02/20 面试题
销售主管的自我评价分享
2014/01/03 职场文书
我的五年职业生涯规划
2014/01/23 职场文书
公司接待方案
2014/03/08 职场文书
暑假家长评语大全
2014/04/17 职场文书
商务日语专业的自荐信
2014/05/23 职场文书
法定代表人证明书
2014/11/28 职场文书
Nginx流量拷贝ngx_http_mirror_module模块使用方法详解
2022/04/07 Servers