Function类型(函数)
Function类型
1、函数实际上是对象,函数名是指向函数对象的指针,因此函数名与其他指向该函数的变量没有什么不同。
比如:
function func (){console.log("funtion");}var func1 = func;func1();console.log(func === func1);
结果是打印“function”和“true”。即func和func1都指向同一个地址。
2、每个函数都是Function类型的实例,与其他引用类型一样,具有属性和方法。函数是引用类型。
3、函数作为对象
(1)属性
name属性:该函数的名字
length属性:该函数希望接收的参数个数,即形参的个数。
prototype属性:函数的原型
caller属性:该函数的作用域父级函数。该属性还未作为标准,但火狐谷歌IE等主流浏览器都已经实现。
第一:构造函数的prototype属性所指向的是原型。
第二:实例的__proto__属性指向的是原型。
所以:数组的原型是数组
实例的原型console.log(arr.__proto__);[constructor: ƒ, concat: ƒ, copyWithin: ƒ, fill: ƒ, find: ƒ, …]构造函数的原型console.log(Array.prototype);[constructor: ƒ, concat: ƒ, copyWithin: ƒ, fill: ƒ, find: ƒ, …]
所以:对象的原型是对象
实例的原型console.log({}.__proto__);{constructor: ƒ, __defineGetter__: ƒ, __defineSetter__: ƒ, hasOwnProperty: ƒ, __lookupGetter__: ƒ, …}构造函数的原型console.log(Object.prototype);{constructor: ƒ, __defineGetter__: ƒ, __defineSetter__: ƒ, hasOwnProperty: ƒ, __lookupGetter__: ƒ, …}
所以:函数的原型是函数
函数实例的原型
console.log(func.__proto__)
ƒ () { [native code] }函数构造函数的原型
console.log(Function.prototype);
ƒ () { [native code] }
特别注意:构造函数有prototype属性指向原型,即函数都是有prototype属性的,所以:函数的prototype属性指向
(2)两个对象
this对象:指向当前调用者。
arguments对象:与实参相关,类数组对象。
(3)三个方法
call、apply、bind方法都是Function.prototype原型对象上的方法,即Function.prototype.call()Function.prototype.apply() 和Function.prototype.bind()方法 。
Function.prototype.toString方法:返回一个表示当前函数源代码的字符串。返回当前函数的函数体。Function
对象覆盖了从Object
继承来的toString
方法。在Function
需要转换为字符串时,通常会自动调用函数的 toString
方法。
所以Function构造函数的每个实例函数都可以直接调用这几个方法。
call方法:改变函数的this指向,即改变函数的执行上下文。接收的第一个参数为对象,后续参数直接传递给函数,诸葛列举出来。后续参数作为arguments内容!
apply方法:改变函数的this指向,即改变函数的执行上下文。接收第一个参数为对象,第二个参数为数组。apply其实是对call的一个封装,apply性能会比call更差。第二个参数的数组中的内容,作为函数的arguments!
bind方法:es5方法,接收一个对象,即该函数的执行上下文,不管该函数在哪执行,执行上下文都是传入的对象。bind获得是函数本身,而为直接执行。
function.bind(thisArg[, arg1[, arg2[, ...]]])
后续参数作为arguments的一部分。因为改变this指向的函数,在执行的时候,还可以接收参数,这些参数作为arguments的另外一部分
var obj = {name: "obj",age : 24,sayName: function(){console.log(arguments);console.log(this.name);}
}
var obj1 = {name: "obj1"
}
obj.sayName.bind(obj1, 1,2,3)(4,5)
结果 :
Arguments(5) [1, 2, 3, 4, 5, callee: ƒ, Symbol(Symbol.iterator): ƒ]
obj1
4、函数作用域链
当函数访问变量时先在自身作用域内查找,若没有则向外层函数的作用域查找,依此类推,直到找到全局作用域为止。
函数只有执行时,才形成作用域。整个函数执行完毕后,才一级一级的销毁作用域链。
5、this对象
函数中,this[属性],必须查找this对象的属性,有,则使用,没有,就是undefined。
6、函数的toString方法
将函数体直接转为字符串
function a(){console.log(1)
}
console.log(typeof a.toString()+"\n", a.toString())
Function类型(函数)相关推荐
- 【js实例】Array类型的9个数组方法,Date类型的41个日期方法,Function类型
前文提要:[js实例]js中的5种基本数据类型和9种操作符 Array类型的9个数组方法 Array中有9个数组方法: 1.检测数组 2.转换方法 3.栈方法 4.队列方法 5.冲排序方法 6.操作方 ...
- Function类型(JS高程3)—— JS学习笔记2015-6-29(第70天)
Function 类型 函数是对象 具有属性和方法,函数名实际上是一个指向函数对象的指针 没有重载: 函数声明和函数表达式 函数声明: function sum (num1, num2){ retur ...
- 【笔记】js Function类型 内部方法callee
运用function实现阶乘 以往的做法是如下的 function factorial(num){if(num <= 1){return 1;}else{return num * factori ...
- JavaScript之function类型
每个函数都是function类型的实例 function name() var name= function() 转载于:https://www.cnblogs.com/anderson0/p/482 ...
- 《javascript高级程序设计》笔记:Function类型
这么长时间没有写博客,就是因为函数这部分比较麻烦,自己一直想抽出大把的时间来研究这个,可是结果却是一拖再拖,这样不好.有时间就写才是王道啊,不然这计划得一直卡在这里了.. 1. 几个概念 函数:将代码 ...
- 数据库系列之mysql 自定义函数function,函数和存储过程的区别
mysql 自定义函数function,函数和存储过程的区别 https://blog.csdn.net/u010365819/article/details/80470448 https://blo ...
- Function(函数)
函数 将一系列代码或者操作行为打包到一起形成的就是函数,一块有特定功能的代码. 存放运行逻辑的代码块,以便重复使用 函数声明和函数表达式却别 函数声明 是function开头 作为关键字,声明函数,并 ...
- JavaScript面向对象之Function类型
JavaScript面向对象之Function类型 下面是我对Function类型的总结,希望对您有帮助. "函数式编程"是一种"编程范式"(programmi ...
- OpenCL Function Qualifiers (函数限定符)
OpenCL Function Qualifiers (函数限定符) OpenCL 3.0 Reference Pages -> OpenCL Compiler -> Function Q ...
最新文章
- 基于改进的点对特征的6D位姿估计
- LiveGBS国标流媒体-摄像机网页低延时无插件直播实现
- 关于前端缓存的一个封装思路
- ERP实施实记(六)之生管课
- 电脑开机后,就会自动运行chkdsk,我想取消chkdsk,怎么取消
- 百度又搞了一个“搜索”~
- 请实现一个函数,用来判断一棵二叉树是不是对称的。
- [Java]jvm参数选项中文文档
- Helm 3 完整教程(七):Helm 函数讲解(1)逻辑和流控制函数
- Rust Async: Pin概念解析
- EtherCAT主站SOEM函数详解---- ecx_statecheck
- FileUtils工具类
- php页面增加js代码,php刷新当前页面_php js实现页面数据刷新的代码
- jQuery-常用知识recap
- 华为机试真题 Python 实现【最短木板长度】【100%通过率】【2022.11 Q4 新题】
- jellyfin 字幕方框问题
- [翻译] Dremel made simple with Parquet
- 精选腾讯出品的 16 款小程序
- 长乐未央——记高桥留美子的辉煌三十年
- [1150]Linux服务器上使用rz命令上传文件报:Segmentation Fault
热门文章
- 解决multiple ‘X-Frame-Options‘ headers with conflicting values (‘DENY, SAMEORIGIN‘)
- Python3快速入门-Python是什么
- 【Python教程】史上最全Python快速入门教程,满满都是干货
- visio2016安装包中文专业版下载及安装教程
- 惠民工程(最小生成树)
- 00_简单常识介绍——NOIP/NOI/IOI(信息学奥林匹克竞赛)
- 线性代数学习笔记——第二十一讲——矩阵秩的等式
- Henry的VB.NET之旅(十)—何时用接口
- director(director)
- 区别网络带宽中的Kbps和KB/s是什么意思?