一、函数
1- 函数分类
1- 函数是在其中有一组代码逻辑构建, 用来执行特定任务。实际上为了易于调试和维护,函数允许以更有组织的方式编写代码。函数还允许代码重用。
2- 在JS中, 函数氛围全局函数/系统函数 与 自定义函数
3- 系统函数也称为内置函数和built-in函数。
4- 现象就是在控制台中无法显示函数的源码, 底层由c编写。只显示
f****(){[native code]}
2- 自定义函数的创建
1- 函数声明式:
function 函数名(){函数体}
2- 函数表达式:
var 函数名(){函数体}
3- 利用系统函数构造
var 函数名 = Function(*参数,函数体字符串)
var 函数名 = new Function(*参数,函数体字符串)
4- 利用ES6 箭头函数
var 函数名 = (*参数) => {函数体}
如图
3- 形参与实参
形参:在定义函数阶段定义的参数称之为形式参数,简称形参,相当于变量名;
实参:在调用函数阶段传入的值称之为实际参数,简称实参,相当于变量值;
4- 函数的调用
1- 函数名()
2- 函数名. call(thisArg, param1, param2, ...)
3- 函数名.apply(thisArg, [param1,param2,...])
4- 匿名自执行
如图
5- 匿名函数
匿名函数,就是没有名的函数,一般出现就直接调用。
1. (function(o) {console.log(o);})('hello world');
2. ~(function(o) {console.log(o);return 10})('hello world');
3. +function(o) {console.log(o);}('hello world');
4. -function(o) {console.log(o);}('hello world');
5. !function(o) {console.log(o);}('hello world');
6. void function(o) {console.log(o);}('hello world');
7. (0, function(o) {console.log(o);})('hello world')
8. ((a,b)=>{return a+b})(1, 2)
6- argument对象
1. 在函数调用的时候,浏览器每次都会传递进两个隐式参数:一个是函数的上下文对象this,另一个则是封装实参的类数组对象arguments
2. arguments的定义是对象,但是因为对象的属性是无序的,而arguments是用来存储实参的,是有顺序的,它具备和数组相同的访问性质及方式,并拥有数组长度属性length,所以arguments是特殊的对象,又叫类数组对象。
3. arguments有一个callee属性,返回正被执行的Function对象,轻易实现递归
4. 可被修改
5. 可转换为真实数组:Array.prototype.slice.call(arguments); [].slice.call(arguments); Array.from(arguments);
[...arguments];
7- 课外小知识
我们看一个对象是否为可迭代对象,需要查看他是否有Symbol.iterator属性