javascript Function函数理解与实战


Posted in Javascript onDecember 01, 2017

Function函数是javascript的基础也是实现功能的一个引爆点,我们通过实例分析让你对Function函数有一个更加深刻的理解以及在实际中的用法讲解。

Function 确实是一个对象.而我们定义的任何一个函数其实都是Function 对象的一个实例,也可以理解为指向 Function 对象的一个实例.

既然是对象的一个实例,那肯定指向了Function 类型的一个引用. 既然指向了一个引用类型的内存地址,那你也可以简单的把我们定义的函数理解为一个变量,这个变量指向了一个引用类型的地址,这个地址指向了Function 对象的一个实例.

既然我们定义的函数其实是一个变量,那这个函数实例地址可以同时指向多个变量.

看下面的代码:

var add = new Function("n", "m", "return n + m");

上面是标准的函数定义,调用了Function对象的构造函数,这个构造函数把前面的N个参数都默认为新函数的参数,直到最后一个参数认为是新函数的函数体.

从上面的语句中非常直观的看到 add这个变量指向了一个Function 类型的实例,但是这种命名方法非常繁琐,等价于:

(1)函数表达式

var add=function(n,m){
return n+m;
}

(2)函数申明

function add(n,m){
return n+m;
}

由于javascript语言中的申明提前,所以一版提倡用第二种方法定义函数,关于函数申明提前单独开辟一篇来说

但是第一种定义方法让人很直观看到 add 是一个指向函数实例的一个变量.

既然是一个变量,就可以赋值给其他变量,可以当做参数在函数中传递,也可以从函数返回.

所以 var add2=add3=add; 现在 三个变量都指向了这个实例的引用, 现在 add=null; 以后 add2,add3 俩个函数完全可以使用不受影响,因为add 移除函数对象的引用后指向了null的引用.所以根本不影响add2 和 add3 两个函数.

所以函数可以当做其他函数的参数传入.

所以函数可以当做函数的返回值返回.

因为函数名只是一个指向函数实例的变量,所以javascript中函数不会有 重载,因为相同的变量指向的是相同的引用地址.最后表示的还是同一个函数.

函数既然是对象的实例,那么就应该有属性,就应该有方法.所以javascript中的 函数有属性也有方法.

比较重要的4个属性 arguments , this , length , prototype

arguments 表示当前函数的参数类数组,这个属性很特殊,他自己还有个属性叫 callee ,

arguments.callee 属性保存了一个指针,指针指向了拥有此 arguments 属性的函数实体(也就相当于函数名)

this属性是当前环境,类似与C# 中的this,表示当前上下文

length 属性表示当前函数接收最大参数个数

prototype 表示该函数的原型,也就是把对象实例的方法完整的保存下来,换句话说就是原型上的方法都继承下来了.比如 toString() valueOf() 等.

接下来,我们来看看function函数种类

普通函数:介绍普通函数的特性:同名覆盖、arguments对象、默认返回值等。

function ShowName(name) {
 alert(name);
}

匿名函数:介绍匿名函数的特性:变量匿名函数、无名称匿名函数。

//变量匿名函数,左侧可以为变量、事件等
var anonymousNormal = function (p1, p2) {
 alert(p1+p2);
}
anonymousNormal(3,6);//输出9

闭包函数:介绍闭包函数的特性。

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();
}
Javascript 相关文章推荐
基于jquery封装的一个js分页
Nov 15 Javascript
Android中资源文件(非代码部分)的使用概览
Dec 18 Javascript
用js读、写、删除Cookie代码续篇
Dec 03 Javascript
javascript实现仿腾讯游戏选择
May 14 Javascript
JavaScript中英文字符长度统计方法示例【按照中文占2个字符】
Jan 17 Javascript
JavaScript实现替换字符串中最后一个字符的方法
Mar 07 Javascript
解决ie11 SCRIPT5011:不能执行已释放Script的代码问题
May 05 Javascript
LayUi使用switch开关,动态的去控制它是否被启用的方法
Sep 21 Javascript
node运行js获得输出的三种方式示例详解
Jul 02 Javascript
Vue 中使用lodash对事件进行防抖和节流操作
Jul 26 Javascript
手动实现vue2.0的双向数据绑定原理详解
Feb 06 Vue.js
帮你提高开发效率的JavaScript20个技巧
Jun 18 Javascript
React Native react-navigation 导航使用详解
Dec 01 #Javascript
分析JS单线程异步io回调的特性
Dec 01 #Javascript
JavaScript定义及输出螺旋矩阵的方法详解
Dec 01 #Javascript
react-navigation 如何判断用户是否登录跳转到登录页的方法
Dec 01 #Javascript
利用babel将es6语法转es5的简单示例
Dec 01 #Javascript
微信小程序实现鼠标拖动效果示例
Dec 01 #Javascript
原生JS实现ajax与ajax的跨域请求实例
Dec 01 #Javascript
You might like
如何开始收听短波广播
2021/03/01 无线电
为查询结果建立向后/向前按钮
2006/10/09 PHP
php中json_encode中文编码问题分析
2011/09/13 PHP
浅谈laravel-admin的sortable和orderby使用问题
2019/10/03 PHP
解决laravel groupBy 对查询结果进行分组出现的问题
2019/10/09 PHP
js中widow.open()方法使用详解
2013/07/30 Javascript
jQuery实现设置、移除文本框默认值功能
2015/01/13 Javascript
Javascript连接Access数据库完整实例
2015/08/03 Javascript
javascript实现简单的分页特效
2015/08/12 Javascript
JS实现左右拖动改变内容显示区域大小的方法
2015/10/13 Javascript
JQuery中解决重复动画的方法
2016/10/17 Javascript
深入理解ES6学习笔记之块级作用域绑定
2017/08/19 Javascript
微信、QQ、微博、Safari中使用js唤起App
2018/01/24 Javascript
微信小程序实用代码段(收藏版)
2019/12/17 Javascript
vue 解决在微信内置浏览器中调用支付宝支付的情况
2020/11/09 Javascript
[05:14]辉夜杯主赛事第二日 RECAP精彩回顾
2015/12/27 DOTA
Python中用于计算对数的log()方法
2015/05/15 Python
python实现图像识别功能
2018/01/29 Python
Python进阶之尾递归的用法实例
2018/01/31 Python
使用pandas实现csv/excel sheet互相转换的方法
2018/12/10 Python
Python数据类型之Dict字典实例详解
2019/05/07 Python
Python django搭建layui提交表单,表格,图标的实例
2019/11/18 Python
Python面向对象之继承原理与用法案例分析
2019/12/31 Python
英国领先的维生素和营养补充剂直接供应商:Healthspan
2019/04/22 全球购物
JSF的标签库有哪些
2012/04/27 面试题
会计电算化专业应届大学生求职信
2013/10/22 职场文书
幼儿园中班上学期评语
2014/04/18 职场文书
三年级学生评语
2014/04/23 职场文书
药品营销专业毕业生自荐信
2014/07/02 职场文书
项目投资合作意向书
2014/07/29 职场文书
社会发展项目建议书
2014/08/25 职场文书
2014年实习生工作总结
2014/11/27 职场文书
搞笑的婚礼主持词
2015/06/29 职场文书
2019学校运动会开幕词
2019/05/13 职场文书
大学生军训心得体会5篇
2019/08/15 职场文书
一文教你快速生成MySQL数据库关系图
2022/06/28 Redis