JavaScript函数内部属性和函数方法实例详解


Posted in Javascript onMarch 17, 2016

函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。

函数是对象,有自己的属性和方法 。首先通过console下输出的函数属性方法来直观的看一下:

JavaScript函数内部属性和函数方法实例详解

函数内部属性只要包括两个特殊的对象:arguments和this。

函数属性包括:length和prototype

函数方法(非继承)包括:apply()和call()

继承而来的函数方法:bind()、toString()、toLocaleString()、valueOf()

其他的目前不熟,后面再补充

1. 函数内部属性

在函数内部,有两个特殊的对象,arguments和this。

arguments属性

arguments是一个类数组对象,包含传入函数的所有参数,arguments的主要用途是保存函数参数,但这个对象有一个callee属性,该属性是一个指针,指向拥有这个arguments对象的函数,下面是非常经典的阶乘函数。

function factorial (num){
if(num <= 1){
return 1;
} else{
return num * factorial(num-1); 
}
}

定义阶乘函数一般都会用到递归算法,如上面代码所示,在有函数名字,并且函数名字以后也不会改变的情况下,这种定义没问题。但是这个函数的执行与函数名factorial紧紧耦合在了一起,为了消除这种紧密耦合现象(函数名字改变等情况),可以使用arguments.callee。

function factorial(num){
if(num<=1){
return 1;
} else{
return num * arguments.callee(num-1);
}
}

重写后的factorial()函数的函数体内,没有再引用函数名factorial。这样即使改变函数名字,都可以保证正常完成递归调用。例如:

var trueFactorial = factorial; //改变原函数体的指针(保存位置)
factorial = function (){ //factorial 指向返回0的新函数
return 0;
}
alert(trueFactorial(5)); //120
alert(factorial(5)); //0

如果,不使用arguments.callee,那么trueFactorial(5)同样返回0;

this属性

2. 函数的方法

每个函数都包含两个非继承而来的方法:apply()和call()。这两个方法的用途都是在特定的域中调用函数(看到这里木有看懂);其真正强大之处在于能够扩充函数赖以运行的作用域

关于JavaScript函数内部属性和函数方法的相关知识,小编就给大家介绍这么多,希望对大家有所帮助!

Javascript 相关文章推荐
js 字符串操作函数
Jul 25 Javascript
动态表格Table类的实现
Aug 26 Javascript
深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP
Jan 15 Javascript
php析构函数的具体用法小结
Mar 11 Javascript
javascript实现拖动元素交换位置
Nov 29 Javascript
jQuery.deferred对象使用详解
Mar 18 Javascript
js实现功能比较全面的全选和多选
Mar 02 Javascript
JavaScript数据类型的存储方法详解
Aug 25 Javascript
详解小程序input框失焦事件在提交事件前的处理
May 05 Javascript
记录vue项目中遇到的一点小问题
May 14 Javascript
js 根据对象数组中的属性进行排序实现代码
Sep 12 Javascript
vue实现简单瀑布流布局
May 28 Javascript
基于jquery实现简单的分页控件
Mar 17 #Javascript
jQuery实现图片局部放大镜效果
Mar 17 #Javascript
jQuery实现放大镜效果实例代码
Mar 17 #Javascript
node.js使用cluster实现多进程
Mar 17 #Javascript
使用pcs api往免费的百度网盘上传下载文件的方法
Mar 17 #Javascript
Fullpage.js固定导航栏-实现定位导航栏
Mar 17 #Javascript
基于socket.io+express实现多房间聊天
Mar 17 #Javascript
You might like
php实现搜索一维数组元素并删除二维数组对应元素的方法
2015/07/06 PHP
php处理复杂xml数据示例
2016/07/11 PHP
PHP接口并发测试的方法(推荐)
2016/12/15 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
Ajax 数据请求的简单分析
2011/04/05 Javascript
阻止子元素继承父元素事件具体思路及实现
2013/05/02 Javascript
jquery实现当滑动到一定位置时固定效果
2014/06/17 Javascript
jQuery中replaceAll()方法用法实例
2015/01/16 Javascript
javascript实现信息增删改查的方法
2015/07/25 Javascript
从零开始学习Node.js系列教程五:服务器监听方法示例
2017/04/13 Javascript
vue实现简单loading进度条
2018/06/06 Javascript
jQuery实现的淡入淡出图片轮播效果示例
2018/08/29 jQuery
解决vue 绑定对象内点击事件失效问题
2018/09/05 Javascript
vue自定义指令之面板拖拽的实现
2019/04/14 Javascript
帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)
2019/08/23 Javascript
node.js中 mysql 增删改查操作及async,await处理实例分析
2020/02/11 Javascript
[01:11:08]Winstrike vs NB 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
基于Python实现文件大小输出
2016/01/11 Python
python与php实现分割文件代码
2017/03/06 Python
使用Python实现简单的服务器功能
2017/08/25 Python
Python获取本机所有网卡ip,掩码和广播地址实例代码
2018/01/22 Python
人脸识别经典算法一 特征脸方法(Eigenface)
2018/03/13 Python
Python+PyQT5的子线程更新UI界面的实例
2019/06/14 Python
在pycharm中创建django项目的示例代码
2020/05/28 Python
SEPHORA丝芙兰捷克官网:购买香水、化妆品和护肤品
2018/11/26 全球购物
英国首屈一指的票务公司:See Tickets
2019/05/11 全球购物
初中生学习生活的自我评价
2013/11/20 职场文书
小小商店教学反思
2014/04/27 职场文书
企业活动策划方案
2014/06/02 职场文书
经典毕业生求职信
2014/07/12 职场文书
中职毕业生自我鉴定
2014/09/13 职场文书
聚会通知怎么写
2015/04/23 职场文书
2015年商场工作总结
2015/04/27 职场文书
2015年全国爱眼日活动方案
2015/05/05 职场文书
浅析InnoDB索引结构
2021/04/05 MySQL
java如何实现socket连接方法封装
2021/09/25 Java/Android