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 相关文章推荐
利用JQuery的load函数动态加载其它页面的内容的实现代码
Dec 14 Javascript
javascript加号&quot;+&quot;的二义性说明
Mar 04 Javascript
防止xss和sql注入:JS特殊字符过滤正则
Apr 18 Javascript
JavaScript定义变量和变量优先级问题探讨
Oct 11 Javascript
JavaScript如何实现组合列表框中元素移动效果
Mar 01 Javascript
EasyUI中在表单提交之前进行验证
Jul 19 Javascript
Bootstrap实现带动画过渡的弹出框
Aug 09 Javascript
vue中渐进过渡效果实现
Oct 27 Javascript
VUE多层路由嵌套实现代码
May 15 Javascript
详解babel升级到7.X采坑总结
May 12 Javascript
vscode vue 文件模板的配置方法
Jul 23 Javascript
微信小程序批量上传图片到七牛(推荐)
Dec 19 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
第一个无线电台是由谁发明的
2021/03/01 无线电
实现dedecms全站URL静态化改造的代码
2007/03/29 PHP
CakePHP去除默认显示的标题及图标的方法
2008/10/22 PHP
PHP执行linux系统命令的常用函数使用说明
2010/04/27 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
tp5(thinkPHP5框架)captcha验证码配置及验证操作示例
2019/05/28 PHP
js字符串的各种格式的转换 ToString,Format
2011/08/08 Javascript
js获取浏览器的可视区域尺寸的实现代码
2011/11/30 Javascript
js实现鼠标经过表格行变色的方法
2015/05/12 Javascript
你所不了解的javascript操作DOM的细节知识点(一)
2015/06/17 Javascript
JavaScript判断手机号运营商是移动、联通、电信还是其他(代码简单)
2015/09/25 Javascript
javascript之Boolean类型对象
2016/06/07 Javascript
全面解析DOM操作和jQuery实现选项移动操作代码分享
2016/06/07 Javascript
jQuery EasyUI Tab 选项卡问题小结
2016/08/16 Javascript
JavaScript常见JSON操作实例分析
2018/08/08 Javascript
angular2实现统一的http请求头方法
2018/08/13 Javascript
python基础教程之元组操作使用详解
2014/03/25 Python
Python设计模式之单例模式实例
2014/04/26 Python
python 制作自定义包并安装到系统目录的方法
2018/10/27 Python
对pandas的行列名更改与数据选择详解
2018/11/12 Python
Python3安装psycopy2以及遇到问题解决方法
2019/07/03 Python
ERLANG和PYTHON互通实现过程详解
2019/07/05 Python
PyQt5实现登录页面
2020/05/30 Python
Python是怎样处理json模块的
2020/07/16 Python
Html5 Geolocation获取地理位置信息实例
2016/12/09 HTML / CSS
美国购买体育、音乐会和剧院门票网站:SelectATicket
2019/09/08 全球购物
计算机个人求职信范例
2014/01/24 职场文书
婚纱摄影师求职信
2014/03/07 职场文书
反四风个人对照检查材料思想汇报
2014/09/25 职场文书
国际贸易本科毕业生求职信
2014/09/26 职场文书
优秀员工推荐材料
2014/12/20 职场文书
思想工作总结范文
2015/08/12 职场文书
《搭石》教学反思
2016/02/18 职场文书
html5中sharedWorker实现多页面通信的示例代码
2021/05/07 Javascript
vue项目打包后路由错误的解决方法
2022/04/13 Vue.js
《火纹风花雪月无双》预告“神秘雇佣兵” 紫发剑客
2022/04/13 其他游戏