函数实际上是对象。每个函数都是Function 类型的实例,而 Function 也有属性和方法,跟其他引用类型一样。因为函数是对象,所以函数名就是 指向函数对象的指针,而且不一定与函数本身紧密绑定。
函数的定义
1 | 1、函数声明式 |
箭头函数
1 | 箭头函数虽然语法简洁,但也有很多场合不适用。箭头函数不能使用 arguments、super 和 new.target,也不能用作构造函数。此外,箭头函数也没有 prototype 属性。 |
函数名
1 | 因为函数名就是指向函数的指针,所以它们跟其他包含对象指针的变量具有相同的行为。这意味着 一个函数可以有多个名称,如下所示: |
函数参数
1 | 定义函数时要接收两个参数,并不意味者调用时就只能传入两个参数,多传,少传,不传。解释器都不会报错。因为ECMAScript 函数的参数在内部表现为一个数组。函数(除箭头函数)都可以从函数内部访问 arguments 对象获取传进来的每个参数值。 |
默认参数值
1 | es5之前 常用的方式:检测某个参数是否等于 undefined,如果是就意味着没传,那就给它赋值 |
参数的扩展与收集
1 | ES6新增扩展操作符,它可以简洁的操作和组合集合数据 |
函数声明与函数表达式
1 | -函数声明 |
函数内部
1 | es5中 ,函数内部只存在两个特殊对象: arguments,this; es6 新增了 new.target |
函数的属性与方法
1 | 中的函数是对象,因此有属性和方法。每个函数都有两个属性:length 和 prototype。 |
Function构造函数
1 | 【注意】 |
递归
1 | 递归函数通常的形式是一个函数通过名称调用自己,如下面的例子所示: |
尾调
1 | ECMAScript 6 规范新增了一项内存管理优化机制,让 JavaScript 引擎在满足条件时可以重用栈帧。 具体来说,这项优化非常适合“尾调用”,即外部函数的返回值是一个内部函数的返回值。比如: |
闭包
1 | 匿名函数经常被人误认为是闭包(closure)。闭包指的是那些引用了另一个函数作用域中变量的函数 |
内存泄漏
1 | IE 在 IE9 之前对 JScript 对象和 COM 对象使用了不同的垃圾回收机制(标记清理/引用计数),所以 闭包在这些旧版本 IE 中可能会导致问题。 |
立即调用函数
1 | 使用 IIFE 可以模拟块级作用域,即在一个函数表达式内部声明变量,然后立即调用这个函数。这 样位于函数体作用域的变量就像是在块级作用域中一样。ECMAScript 5 尚未支持块级作用域,使用 IIFE 模拟块级作用域是相当普遍的。比如下面的例子: |
函数的私有变量
1 | function add(num1, num2) { |
Function 与 object
1 | Object、Function和其它对象的关系可以归纳为下面四点: |
部件
1 | var eventuallity = function(that){ |
- 本文作者: 王不留行
- 本文链接: https://wyf195075595.github.io/2022/06/17/programming/红宝书笔记/第十章 函数/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!