函数进阶
函数的定义方式
- 函数声明
- 函数表达式
- new Function
函数声明
function foo () {
}
函数表达式
var foo = function () {
}
函数声明与函数表达式的区别
- 函数声明必须有名字
- 函数声明会函数提升,在预解析阶段就已创建,声明前后都可以调用
- 函数表达式类似于变量赋值
- 函数表达式可以没有名字,例如匿名函数
- 函数表达式没有变量提升,在执行阶段创建,必须在表达式执行之后才可以调用
如下,定义一个函数的例子:
if (true) {
function f () {
console.log(1)
}
} else {
function f () {
console.log(2)
}
}
以上代码执行结果在不同浏览器中结果不一致。
通过函数表达式的方式就可以解决以上问题:
var f
if (true) {
f = function () {
console.log(1)
}
} else {
f = function () {
console.log(2)
}
}
函数的调用方式
- 普通函数
- 构造函数
- 对象方法
函数内this指向的不同场景
函数的调用方式决定了this的指向不同:
调用方式 |
非严格模式 |
备注 |
普通函数调用 | window | 严格模式下是undefined |
构造函数调用 | 实例对象 | 原型方法中this也是实例对象 |
对象方法调用 | 该方法所属对象 | 紧挨着的对象 |
事件绑定方法 | 绑定事件对象 | |
定时器函数 | window |
以上就是对函数内部this指向的基本整理
- 还没有人评论,欢迎说说您的想法!