函数的声明和函数表达式
函数声明如果放在if-else的语句中,在IE8的浏览器中会出现问题,
以后宁愿要函数表达式,都不要用函数声明
// 函数声明
if (true) {
function f1() {
console.log("if的方法");
};
} else {
function f1() {
console.log("else的方法");
};
}
f1();
// 函数表达式
var ff;
if (true) {
ff = function() {
console.log("函数表达式的if")
}
} else {
ff = function() {
console.log("函数表达式的else")
}
}
ff();
函数中this的指向
- 函数中this的指向
- 普通函数中this的指向:window
- 对象.方法中this的指向:当前的实例对象
- 定时器方法中this的指向:window
- 构造函数中this的指向:实例对象
- 原型对象方法中this的指向:实例对象
<script type="text/javascript">
"use strict"; //使用 严格模式
function f1() {
console.log(this); //window
};
//普通函数
function f1() {
console.log(this);
}
f1();
定时器中的this
setInterval(function () {
console.log(this);
},1000);
// 构造函数
function Person() {
console.log(this);
对象的方法
this.sayHi=function () {
console.log(this);
};
}
// 原型中的方法
Person.prototype.eat=function () {
console.log(this);
};
var per=new Person();
console.log(per);
per.sayHi();
per.eat();
//BOM:中顶级对象是window,浏览器中所有的东西都是window的
</script>
函数的不同调用方式
<script type="text/javascript">
// 普通函数
function f1() {
console.log("张家界案件");
}
f1();
// 构造函数---通过new来创建对象
function F1() {
console.log("阿加");
}
var f = new F1();
// 对象中的方法
function Person() {
this.play = function() {
console.log("金娃鸡啊");
};
}
var per = new Person();
per.play();
</script>
函数也是对象
- 函数是对象,对象不一定是函数
- 对象中有proto原型,是对象
- 函数中有prototype原型,是对象
- 如果一个东西里面有prototype,又有proto,说明是函数,也是对象
<script type="text/javascript">
var f1 = new Function("num1", "num2", "return num1+num2");
console.log(f1(10, 20)); //30
console.log(f1.__proto__ == Function.prototype); //true
// 所以,函数实际上也是对象
console.dir(f1);
console.dir(Function);
</script>
数组的函数调用
<script type="text/javascript">
var arr = [function() {
console.log("我就安静")
},
function() {
console.log("分啊啊")
},
function() {
console.log("个恩爱")
},
function() {
console.log("哈哈哈")
},
function() {
console.log("还问我")
}
];
// 回调函数:函数作为参数使用
arr.forEach(function(ele) {
ele();
})
</script>
网友评论