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 相关文章推荐
json格式化/压缩工具 Chrome插件扩展版
May 25 Javascript
在linux中使用包管理器安装node.js
Mar 13 Javascript
正则表达式(语法篇推荐)
Jun 24 Javascript
jQuery 插件实现随机自由弹跳气泡样式
Jan 12 Javascript
jQuery实现的背景颜色渐变动画效果示例
Mar 24 jQuery
在vue.js中抽出公共代码的方法示例
Jun 08 Javascript
如何在vue里面优雅的解决跨域(路由冲突问题)
Jan 20 Javascript
jQuery选择器之层次选择器用法实例分析
Feb 19 jQuery
微信小程序rich-text富文本用法实例分析
May 20 Javascript
jquery实现购物车基本功能
Oct 25 jQuery
微信小程序自定义弹出模态框禁止底部滚动功能
Mar 09 Javascript
jQuery实现高度灵活的表单验证功能示例【无UI】
Apr 30 jQuery
基于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
使用sockets:从新闻组中获取文章(二)
2006/10/09 PHP
基于PHP一些十分严重的缺陷详解
2013/06/03 PHP
php读取mssql的ntext字段返回值为空的解决方法
2014/12/30 PHP
thinkphp跨库操作的简单代码实例
2016/09/22 PHP
PHP以json或xml格式返回请求数据的方法
2018/05/31 PHP
PHP 出现 http500 错误的解决方法
2021/03/09 PHP
使用js操作cookie的一点小收获分享
2013/09/03 Javascript
jQuery 删除/替换DOM元素的几种方式
2014/05/20 Javascript
jquery根据属性和index来查找属性值并操作
2014/07/25 Javascript
extjs 分页使用jsp传递数据示例
2014/07/29 Javascript
jQuery源码解读之removeAttr()方法分析
2015/02/20 Javascript
解决node.js安装包失败的几种方法
2016/09/02 Javascript
vue.js指令v-for使用及索引获取
2016/11/03 Javascript
微信小程序 setData的使用方法详解
2017/04/20 Javascript
AngularJS中使用ngModal模态框实例
2017/05/27 Javascript
JavaScript之Date_动力节点Java学院整理
2017/06/28 Javascript
vue中的自定义分页插件组件的示例
2018/08/18 Javascript
关于ligerui子页面关闭后,父页面刷新,重新加载的方法
2019/09/27 Javascript
javascript事件循环event loop的简单模型解释与应用分析
2020/03/14 Javascript
修改NPM全局模式的默认安装路径的方法
2020/12/15 Javascript
elementui实现预览图片组件二次封装
2020/12/29 Javascript
[01:00]DOTA2 store: Collection of Artisan's Wonders
2015/08/12 DOTA
Python测试人员需要掌握的知识
2018/02/08 Python
解决Django migrate No changes detected 不能创建表的问题
2018/05/27 Python
用Python shell简化开发
2018/08/08 Python
python中栈的原理及实现方法示例
2019/11/27 Python
pandas apply使用多列计算生成新的列实现示例
2021/02/24 Python
丝芙兰中国官方商城:SEPHORA中国
2018/01/10 全球购物
iPad和Surface Pro蓝牙键盘:Brydge
2018/11/10 全球购物
英国家电购物网站:Sonic Direct
2019/03/26 全球购物
联想智利官方网站:Lenovo Chile
2020/06/03 全球购物
以思科路由器为例你写下单臂路由的配置命令
2013/08/03 面试题
幼儿园亲子活动方案
2014/01/29 职场文书
公司投资建议书
2014/05/16 职场文书
社区义诊通知
2015/04/24 职场文书
JAVA SpringMVC实现自定义拦截器
2022/03/16 Python