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实现拖拽效果插件的方法
Mar 23 Javascript
Jquery为DIV添加click事件的简单实例
Jun 02 Javascript
浅谈JavaScript函数的四种存在形态
Jun 08 Javascript
BootStrap+Angularjs+NgDialog实现模式对话框
Aug 24 Javascript
Bootstrap菜单按钮及导航实例解析
Sep 09 Javascript
微信小程序 scroll-view组件实现列表页实例代码
Dec 14 Javascript
React简单介绍
May 24 Javascript
Vue-Access-Control 前端用户权限控制解决方案
Dec 01 Javascript
webpack+vue+express(hot)热启动调试简单配置方法
Sep 19 Javascript
js的对象与函数详解
Jan 21 Javascript
vue接入腾讯防水墙代码
May 07 Javascript
javascript实现固定侧边栏
Feb 09 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
ThinkPHP模板之变量输出、自定义函数与判断语句用法
2014/11/01 PHP
php中magic_quotes_gpc对unserialize的影响分析
2014/12/16 PHP
刷新PHP缓冲区为你的站点加速
2015/10/10 PHP
Yii2.0多文件上传实例说明
2017/07/24 PHP
thinkPHP5框架实现基于ajax的分页功能示例
2018/06/12 PHP
漂亮的thinkphp 跳转页封装示例
2019/10/16 PHP
javascript游戏开发之《三国志曹操传》零部件开发(一)让静态人物动起来
2013/01/23 Javascript
javascript判断非数字的简单例子
2013/07/18 Javascript
调用innerHTML之后onclick失效问题的解决方法
2014/01/28 Javascript
js正则表达exec与match的区别说明
2014/01/29 Javascript
JavaScript跨域方法汇总
2014/10/16 Javascript
JSONP跨域GET请求解决Ajax跨域访问问题
2014/12/31 Javascript
JS实现自动固定顶部的悬浮菜单栏效果
2015/09/16 Javascript
Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready
2015/11/24 Javascript
浅谈JavaScript find 方法不支持IE的问题
2017/09/28 Javascript
浅谈vue,angular,react数据双向绑定原理分析
2017/11/28 Javascript
解决vue-cli脚手架打包后vendor文件过大的问题
2018/09/27 Javascript
微信小程序自定义toast的实现代码
2018/11/16 Javascript
vue+express+jwt持久化登录的方法
2019/06/14 Javascript
python进阶教程之函数对象(函数也是对象)
2014/08/30 Python
学习python之编写简单乘法口诀表实现代码
2016/02/27 Python
Anaconda多环境多版本python配置操作方法
2017/09/12 Python
Python实现的十进制小数与二进制小数相互转换功能
2017/10/12 Python
Python聊天室程序(基础版)
2018/04/01 Python
解决Spyder中图片显示太小的问题
2018/04/27 Python
Python实现爬虫抓取与读写、追加到excel文件操作示例
2018/06/27 Python
Python3最长回文子串算法示例
2019/03/04 Python
Django Python 获取请求头信息Content-Range的方法
2019/08/06 Python
python每5分钟从kafka中提取数据的例子
2019/12/23 Python
Python json读写方式和字典相互转化
2020/04/18 Python
python用Tkinter做自己的中文代码编辑器
2020/09/07 Python
Pytorch生成随机数Tensor的方法汇总
2020/09/09 Python
python实现excel公式格式化的示例代码
2020/12/23 Python
煤矿班组长岗位职责
2013/12/29 职场文书
小学运动会入场口号
2015/12/24 职场文书
52条SQL语句教你性能优化
2021/05/25 MySQL