0%

this有什么问题?

JavaScript有三大坑:闭包,this和异步。在十五分钟搞定JavaScript闭包中我们简单看了看闭包,今天就来说一说这个this。那么this有什么问题呢?JavaScript中到处都是惊喜,先来看一个:

1
2
3
4
5
6
7
8
9
const obj = {
msg: "obj's message",
sendMessage() {
console.log('excuting function foo...');
console.log(this.msg);
}
};

obj.sendMessage();

执行这段代码的结果是啥?这个没有问题,运行结果就是输出两行内容:excuting function foo...obj's message。如果想让它执行结束过一秒再执行一次的话,大家可能会认为代码应该是这个样子的:

1
2
3
4
5
6
7
8
9
10
const obj = {
msg: "obj's message",
sendMessage() {
console.log('excuting function foo...');
console.log(this.msg);
}
};

obj.sendMessage();
setTimeout(obj.sendMessage, 1000);

猜一猜结果?

Read more »

什么是闭包?

简单通(cuo)俗(wu)来说,闭包就是一个函数,只不过这个函数是在另一个函数内声明的。
这句话是不太严谨,但是此刻我们先这么理解就对了。
举个例子,通常我们声明函数是这样的:

1
2
3
function func1() {
//...
}

如果一个函数是在另一个函数中声明的:

1
2
3
4
5
function func2() {
function func3() {
//...
}
}

那么,这里的func3函数就是传说中的闭包。这个时候,有人就会问,这个闭包func3跟正常声明的func1函数有啥不一样的?
嗯,这个问题问得好。没有什么大区别,除了这一点: ** func3函数可以访问func2函数的作用域 **。
就是这一点点小区别,就给起了个名字?上个世纪六十年代嘛,大家都喜欢搞点噱头。
正是这一个伟大的区别,人们加以利用实现了伟大的跨越。

Read more »