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 相关文章推荐
img标签中onerror用法
Aug 13 Javascript
jquery.cvtooltip.js 基于jquery的气泡提示插件
Nov 19 Javascript
JavaScript 变量作用域分析
Jul 04 Javascript
微信小程序之仿微信漂流瓶实例
Dec 09 Javascript
javascript 判断当前浏览器版本并判断ie版本
Feb 17 Javascript
基于bootstrap实现多个下拉框同时搜索功能
Jul 19 Javascript
vue如何集成raphael.js中国地图的方法示例
Aug 15 Javascript
vue 实现复制内容到粘贴板clipboard的方法
Mar 17 Javascript
微信小程序和百度的语音识别接口详解
May 06 Javascript
微信小程序实现图片压缩
Dec 03 Javascript
使用pkg打包ThinkJS项目的方法步骤
Dec 30 Javascript
实例讲解React 组件生命周期
Jul 08 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中对用户身份认证实现两种方法
2011/06/04 PHP
无刷新动态加载数据 滚动条加载适合评论等页面
2013/10/16 PHP
PHP实现的数组和XML文件相互转换功能示例
2018/03/15 PHP
PHP调用微博接口实现微博登录的方法示例
2018/09/22 PHP
Javascript中Eval函数的使用说明
2008/10/11 Javascript
Flexigrid在IE下不显示数据的处理的解决方法
2013/10/24 Javascript
javascript静态页面传值的三种方法分享
2013/11/12 Javascript
node.js+Ajax实现获取HTTP服务器返回数据
2014/11/26 Javascript
jQuery中queue()方法用法实例
2014/12/29 Javascript
JS动态修改iframe内嵌网页地址的方法
2015/04/01 Javascript
jQuery实现模仿微博下拉滚动条加载数据效果
2015/12/25 Javascript
gulp-htmlmin压缩html的gulp插件实例代码
2016/06/06 Javascript
JavaScript注入漏洞的原理及防范(详解)
2016/12/04 Javascript
在vue中添加Echarts图表的基本使用教程
2017/11/22 Javascript
AngularJS使用ui-route实现多层嵌套路由的示例
2018/01/10 Javascript
开发用到的js封装方法(20种)
2018/10/12 Javascript
vue 项目地址去掉 #的方法
2018/10/20 Javascript
使用rollup打包JS的方法步骤
2018/12/05 Javascript
详解vue中使用protobuf踩坑记
2019/05/07 Javascript
js验证密码强度解析
2020/03/18 Javascript
JavaScript 引用类型实例详解【数组、对象、严格模式等】
2020/05/13 Javascript
[02:43]DOTA2英雄基础教程 圣堂刺客
2013/12/09 DOTA
Python的Tornado框架异步编程入门实例
2015/04/24 Python
Python用户推荐系统曼哈顿算法实现完整代码
2017/12/01 Python
python自动发邮件库yagmail的示例代码
2018/02/23 Python
解决pandas read_csv 读取中文列标题文件报错的问题
2018/06/15 Python
python 读取数据库并绘图的实例
2019/12/03 Python
python实现双人五子棋(终端版)
2020/12/30 Python
HTML5 canvas 基本语法
2009/08/26 HTML / CSS
英国蛋糕装饰用品一站式商店:Craft Company
2019/03/18 全球购物
《跨越百年的美丽》教学反思
2014/02/11 职场文书
委托协议书范本
2014/04/22 职场文书
妇女干部培训方案
2014/05/12 职场文书
工作表扬信范文
2015/01/17 职场文书
面试必问:圣杯布局和双飞翼布局的区别
2021/05/13 HTML / CSS
Mybatis-plus配置分页插件返回统一结果集
2022/06/21 Java/Android