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 相关文章推荐
IE和Mozilla的兼容性汇总event
Aug 12 Javascript
禁用JavaScript控制台调试的方法
Mar 07 Javascript
javascript实现dom动态创建省市纵向列表菜单的方法
May 14 Javascript
深入浅析javascript立即执行函数
Oct 23 Javascript
JavaScript制作颜色反转小游戏
Sep 25 Javascript
微信小程序遇到修改数据后页面不渲染的问题解决
Mar 09 Javascript
微信小程序商城项目之商品属性分类(4)
Apr 17 Javascript
关于HTTP传输中gzip压缩的秘密探索分析
Jan 12 Javascript
详解小程序云开发数据库
May 20 Javascript
layer.prompt输入层的例子
Sep 24 Javascript
解决vue-cli输入命令vue ui没效果的问题
Nov 17 Javascript
JavaScript控制台的更多功能
Apr 28 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 判断是否是中文/英文/数字示例代码
2013/09/30 PHP
thinkphp实现上一篇与下一篇的方法
2014/12/08 PHP
php替换字符串中间字符为省略号的方法
2015/05/04 PHP
PHP命名空间与自动加载类详解
2018/09/04 PHP
脚本吧 - 幻宇工作室用到js,超强推荐share.js
2006/12/23 Javascript
JavaScript Object的extend是一个常用的功能
2009/12/02 Javascript
JQuery 学习笔记01 JQuery初接触
2010/05/06 Javascript
jquery提升性能最佳实践小结
2010/12/06 Javascript
地址栏传递中文参数乱码在js里用escape转码
2013/08/28 Javascript
解决jQuery动态获取手机屏幕高和宽的问题
2014/05/07 Javascript
javascript制作幻灯片(360度全景图片)
2015/07/28 Javascript
jquery带动画效果幻灯片特效代码
2015/08/27 Javascript
清除浏览器缓存的几种方法总结(必看)
2016/12/09 Javascript
angular-ngSanitize模块-$sanitize服务详解
2017/06/13 Javascript
jQuery、layer实现弹出层的打开、关闭功能
2017/06/28 jQuery
聊聊Vue.js的template编译的问题
2017/10/09 Javascript
vue微信分享 vue实现当前页面分享其他页面
2017/12/02 Javascript
Vue拖拽组件列表实现动态页面配置功能
2019/06/17 Javascript
微信小程序使用 vant Dialog组件的正确方式
2020/02/21 Javascript
python输出电脑上所有的串口名的方法
2019/07/02 Python
python实现智能语音天气预报
2019/12/02 Python
Python os模块常用方法和属性总结
2020/02/20 Python
Python通过socketserver处理多个链接
2020/03/18 Python
Python基于模块Paramiko实现SSHv2协议
2020/04/28 Python
python使用smtplib模块发送邮件
2020/12/17 Python
Marks & Spencer爱尔兰:英国马莎百货
2016/04/20 全球购物
澳大利亚现代波西米亚风格女装网站:Bohemian Traders
2018/04/16 全球购物
What's the difference between deep copy and shallow copy? (深拷贝与浅拷贝有什么区别)
2015/11/10 面试题
分公司经理岗位职责
2013/11/11 职场文书
产品包装策划方案
2014/05/18 职场文书
阳光体育活动实施方案
2014/05/25 职场文书
大学生迟到检讨书500字
2014/10/17 职场文书
预备党员的思想汇报,你真的会写吗?
2019/06/28 职场文书
position:sticky 粘性定位的几种巧妙应用详解
2021/04/24 HTML / CSS
Python 数据可视化之Seaborn详解
2021/11/02 Python
vue如何使用模拟的json数据查看效果
2022/03/31 Vue.js