函数
1.定义:函数是由事件驱动的当被调用执行时可以重复使用的代码块。
2.函数可以在任何时候任何地方封装,也可以在任何时候任何地方被调用执行(针对命名函数,因为匿名函数赋值给的变量存在声明提升)
3.函数里的隐藏对象:arguments。
arguments是一伪数组,是对象,是所有实参的一个集合
eg: function fn(a,,b,c,d,e){
console.log(arguments instanceof Array); false
arguments[0] = 10;
console.log(a); 10
console.log(arguments); [10,2,3,4,5]
console.log(arguments.callee); 函数本身
}
Fn(1,2,3,4,5);
总结:
- arguments方法能改变参数值;
- 形参的值并非来自实参,而是来自arguments集合;
4.This
严格模式:this指向undefined;
非严格模式:this必须是对象。ES5之前this是包含它的函数作为方法被调用执行时所属的对象,如果找不到就是window对象。ES6新增了箭头函数,在箭头函数中,要考虑上下文的执行环境,实际上this没有指向,this只是借用了其父环境的this指向,如果单独存在,则是window对象。
5.递归(若使用必须有一个出口使其停止执行)
定义:函数调用函数(所有递归能实现的循环也能实现,所有循环能实现的递归也能实现)
Eg:实现阶乘5*4*3*2*1
function fn(i){
if(I == 1){
fn(1)
}else{
return fn(i-1)*i
}
}
fn(5)
6.闭包
定义:ES6之前是一个函数有权访问另一个函数(可以是立即执行函数)的局部变量或方法=》函数包含函数;ES6之后是作用域中出现作用域(作用域的嵌套)。
作用:会存储相应变量的值。
Eg: function fn(p1){
this.sayHello =function(){
return p1;
}
return function(p2){
return sayHello() + p2;
}
}
fn(“hello,”)(“world”); “hello,world”(作用域链,this指向window)
7.立即执行函数
定义:模拟一个块级作用域(一开始就执行的)
写法:(function(){})()