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类型(函数)相关推荐

  1. 【js实例】Array类型的9个数组方法,Date类型的41个日期方法,Function类型

    前文提要:[js实例]js中的5种基本数据类型和9种操作符 Array类型的9个数组方法 Array中有9个数组方法: 1.检测数组 2.转换方法 3.栈方法 4.队列方法 5.冲排序方法 6.操作方 ...

  2. Function类型(JS高程3)—— JS学习笔记2015-6-29(第70天)

    Function 类型 函数是对象 具有属性和方法,函数名实际上是一个指向函数对象的指针 没有重载: 函数声明和函数表达式 函数声明: function sum (num1, num2){ retur ...

  3. 【笔记】js Function类型 内部方法callee

    运用function实现阶乘 以往的做法是如下的 function factorial(num){if(num <= 1){return 1;}else{return num * factori ...

  4. JavaScript之function类型

    每个函数都是function类型的实例 function name() var name= function() 转载于:https://www.cnblogs.com/anderson0/p/482 ...

  5. 《javascript高级程序设计》笔记:Function类型

    这么长时间没有写博客,就是因为函数这部分比较麻烦,自己一直想抽出大把的时间来研究这个,可是结果却是一拖再拖,这样不好.有时间就写才是王道啊,不然这计划得一直卡在这里了.. 1. 几个概念 函数:将代码 ...

  6. 数据库系列之mysql 自定义函数function,函数和存储过程的区别

    mysql 自定义函数function,函数和存储过程的区别 https://blog.csdn.net/u010365819/article/details/80470448 https://blo ...

  7. Function(函数)

    函数 将一系列代码或者操作行为打包到一起形成的就是函数,一块有特定功能的代码. 存放运行逻辑的代码块,以便重复使用 函数声明和函数表达式却别 函数声明 是function开头 作为关键字,声明函数,并 ...

  8. JavaScript面向对象之Function类型

    JavaScript面向对象之Function类型 下面是我对Function类型的总结,希望对您有帮助. "函数式编程"是一种"编程范式"(programmi ...

  9. OpenCL Function Qualifiers (函数限定符)

    OpenCL Function Qualifiers (函数限定符) OpenCL 3.0 Reference Pages -> OpenCL Compiler -> Function Q ...

最新文章

  1. 基于改进的点对特征的6D位姿估计
  2. LiveGBS国标流媒体-摄像机网页低延时无插件直播实现
  3. 关于前端缓存的一个封装思路
  4. ERP实施实记(六)之生管课
  5. 电脑开机后,就会自动运行chkdsk,我想取消chkdsk,怎么取消
  6. 百度又搞了一个“搜索”~
  7. 请实现一个函数,用来判断一棵二叉树是不是对称的。
  8. [Java]jvm参数选项中文文档
  9. Helm 3 完整教程(七):Helm 函数讲解(1)逻辑和流控制函数
  10. Rust Async: Pin概念解析
  11. EtherCAT主站SOEM函数详解---- ecx_statecheck
  12. FileUtils工具类
  13. php页面增加js代码,php刷新当前页面_php js实现页面数据刷新的代码
  14. jQuery-常用知识recap
  15. 华为机试真题 Python 实现【最短木板长度】【100%通过率】【2022.11 Q4 新题】
  16. jellyfin 字幕方框问题
  17. [翻译] Dremel made simple with Parquet
  18. 精选腾讯出品的 16 款小程序
  19. 长乐未央——记高桥留美子的辉煌三十年
  20. [1150]Linux服务器上使用rz命令上传文件报:Segmentation Fault

热门文章

  1. 解决multiple ‘X-Frame-Options‘ headers with conflicting values (‘DENY, SAMEORIGIN‘)
  2. Python3快速入门-Python是什么
  3. 【Python教程】史上最全Python快速入门教程,满满都是干货
  4. visio2016安装包中文专业版下载及安装教程
  5. 惠民工程(最小生成树)
  6. 00_简单常识介绍——NOIP/NOI/IOI(信息学奥林匹克竞赛)
  7. 线性代数学习笔记——第二十一讲——矩阵秩的等式
  8. Henry的VB.NET之旅(十)—何时用接口
  9. director(director)
  10. 区别网络带宽中的Kbps和KB/s是什么意思?