什么是函数?
具有特定功能的n条语句的封装体
只有函数是可执行的, 其它类型的数据是不可执行的
函数也是对象
为什么要用函数?
提高代码复用
便于阅读和交流
如何定义函数?
函数声明
表达式
如何调用(执行)函数?
test()
new test()
obj.test()
test.call/apply(obj)
回调函数
什么函数才是回调函数?
你定义的
你没有直接调用
但最终它执行了(在特定条件或时刻)
常见的回调函数?
DOM事件函数
定时器函数
ajax回调函数
生命周期回调函数
IIFE
理解
全称: Immediately-Invoked Function Expression
立即调用函数表达式别名: 匿名函数自调用
作用
* 隐藏内部实现
* 不污染外部命名空间
函数中的this
1. 以函数的形式调用时,this永远都是window
2. 以方法的形式调用时,this就是调用方法的那个对象
3. 当以构造函数的形式调用时,this就是新创建的那个对象
4. 使用call和apply调用时,this是指定的那个对象
理解1
function Person(color) {
// console.log(this)
this.color = color;
this.getColor = function () {
// console.log(this)
return this.color;
};
this.setColor = function (color) {
// console.log(this)
this.color = color;
};
}
// 以函数的形式调用时,this永远都是window
Person("red"); //this是谁? window
var p = new Person("yello"); //this是谁?
// 当以构造函数的形式调用时,this就是新创建的那个对象
p.getColor(); //this是谁? p
var obj = {};
// 使用call和apply调用时,this是指定的那个对象
p.setColor.call(obj, "black"); //this是谁? obj
// 以方法的形式调用时,this就是调用方法的那个对象
var test = p.setColor;
test(); //this是谁? window
理解2
function fun1() {
function fun2() {
console.log(this);
}
fun2(); //this是谁? window
}
fun1();