一、定义:
函数也是一个对象,可以重复执行的代码块,完成特定功能的一段代码,使用typeof检查会返回function。二、函数常用定义方式:
(1)函数声明式:function sun(a,b){
return a+b;
}
sum(1,2);
(2)函数表达式声明方式:
var sum = function(a,b){
console.log(a+b);
}
sum(1,2);
三、arguments对象:
Arguments维数组对象,里面的指针是callee,用来装函数里面的实参,拿到传递实际参数的个数。四、函数直接声明和函数表达式声明:
- 函数声明必须有函数名,而函数表达式声明的函数名可以省略
- JS解析时会先把函数声明提前到整个作用域的最前面
- JS解析时会把变量提升到最前面
四、回调函数:
定义:把一个函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。五、作用域链:
简单说明:从里往外走,单条链路。一般情况下变量取值会在本作用域中查找,如果当前作用域中没有就会向上一级作用域中查找,直到查到全局作用域,这一查找过程就会形成作用域链。- 只有函数可以制造作用于结构,那么只要是代码,就至少有一个作用域
- 凡是代码中有函数,那么这个函数就构成另一个作用域
- 如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域
代码案例:
var color = 'yellow';
function getColor(){
var anotherColor = "red";
function swapColor(){
var tmpColor = color;
color = anotherColor;
anotherColor = tmpColor;
}
swapColor();
}
getColor();
console.log(color);
画图分析:
解析:代码是从上往下执行(根据变量提升)会先到变量color再到函数getColor,进入getColor()里面同样的方式进入到swapColor函数因为里面没有定义color,一层一层往外找找到color为yellow。此时tmpColor 为red,同样color 为red。
六、预解析
(1)概念:JS代码的执行是由浏览器中的JS解析器来执行的,JS代码执行时分两个过程,预解析过程和代码执行过程。 (2)预解析过程:- 把变量的声明提升到当前作用域的最前面,只会提升声明,不会提升赋值。
- 把函数的声明提升到当前作用域的最前面,不会提升调用。
代码实例:
console.log(fn2);
function fn2(){
console.log("我是函数");
}
var fn2 = "我是变量";
console.log(fn2);
解析:JS解析时把函数fn先提升但是不会提升调用所以我们先看到的是