JavaScript function函数种类详解


Posted in Javascript onFebruary 22, 2016

本篇主要介绍普通函数、匿名函数、闭包函数

目录

  • 普通函数:介绍普通函数的特性:同名覆盖、arguments对象、默认返回值等。
  • 匿名函数:介绍匿名函数的特性:变量匿名函数、无名称匿名函数。
  • 闭包函数:介绍闭包函数的特性。

 

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 相关文章推荐
初学js 新节点的创建 删除 的步骤
Jul 04 Javascript
Table冻结表头示例代码
Aug 20 Javascript
jquery 绑定回车动作扑捉回车键触发的事件
Mar 26 Javascript
js调试系列 断点与动态调试[基础篇]
Jun 18 Javascript
JQuery 在线引用及测试引用是否成功
Jun 24 Javascript
jQuery实现两款有动画功能的导航菜单代码
Sep 16 Javascript
jQuery zclip插件实现跨浏览器复制功能
Nov 02 Javascript
js date 格式化
Feb 15 Javascript
Vue 单文件中的数据传递示例
Mar 21 Javascript
基于Vue.js 2.0实现百度搜索框效果
Dec 28 Javascript
iview给radio按钮组件加点击事件的实例
Sep 30 Javascript
javascript数据类型中的一些小知识点(推荐)
Apr 18 Javascript
JavaScript+html5 canvas实现图片破碎重组动画特效
Feb 22 #Javascript
jQuery获取字符串中出现最多的数
Feb 22 #Javascript
jQuery基于muipicker实现仿ios时间选择
Feb 22 #Javascript
简单谈谈javascript中this的隐式绑定
Feb 22 #Javascript
javascript实现一个简单的弹出窗
Feb 22 #Javascript
Js的Array数组对象详解
Feb 22 #Javascript
AngularJS中使用HTML5手机摄像头拍照
Feb 22 #Javascript
You might like
谈谈PHP语法(2)
2006/10/09 PHP
基于php 随机数的深入理解
2013/06/05 PHP
Google Suggest ;-) 基于js的动态下拉菜单
2006/10/11 Javascript
jQuery select操作控制方法小结
2010/05/26 Javascript
基于jquery的无限级联下拉框js插件
2011/10/29 Javascript
jQuery实现单行文字间歇向上滚动源代码
2013/06/02 Javascript
浅析jquery某一元素重复绑定的问题
2014/01/03 Javascript
js如何获取兄弟、父类等节点
2014/01/06 Javascript
Javscript删除数组中指定元素并返回新数组
2014/03/06 Javascript
jquery通过select列表选择框对表格数据进行过滤示例
2014/05/07 Javascript
jQuery仿天猫实现超炫的加入购物车
2015/05/04 Javascript
基于BootStrap的Metronic框架实现页面链接收藏夹功能按钮移动收藏记录(使用Sortable进行拖动排序)
2016/08/29 Javascript
js正则表达式注册页面表单验证
2016/10/11 Javascript
jQuery实现CheckBox全选、全不选功能
2017/01/11 Javascript
Javascript 实现匿名递归的实例代码
2017/05/25 Javascript
JS开发中基本数据类型具体有哪几种
2017/10/19 Javascript
JavaScript实现的贝塞尔曲线算法简单示例
2018/01/30 Javascript
three.js实现炫酷的全景3D重力感应
2018/12/30 Javascript
Python实现八大排序算法
2016/08/13 Python
python爬取网易云音乐评论
2018/11/16 Python
通过selenium抓取某东的TT购买记录并分析趋势过程解析
2019/08/15 Python
Python实现括号匹配方法详解
2020/02/10 Python
PyCharm刷新项目(文件)目录的实现
2020/02/14 Python
Python找出列表中出现次数最多的元素三种方式
2020/02/24 Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
2020/08/07 Python
布局和排版教程 纯css3实现图片三角形排列
2014/10/17 HTML / CSS
使用HTML5进行SVG矢量图形绘制的入门教程
2016/02/19 HTML / CSS
乌克兰在线电子产品商店:MTA
2019/11/14 全球购物
营业经理岗位职责
2013/11/10 职场文书
师范应届毕业生自荐信
2013/11/18 职场文书
《小草和大树》教学反思
2014/02/16 职场文书
元旦联欢会主持词
2014/03/26 职场文书
学期个人自我总结
2015/02/13 职场文书
《秋天的怀念》教学反思
2016/02/17 职场文书
漫画《催眠麦克风-Dawn Of Divisions》第二卷PV公开
2022/04/05 日漫
MySQL创建管理RANGE分区
2022/04/13 MySQL