JavaScript中this的用法有哪些具体场景和注意事项?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1203个文字,预计阅读时间需要5分钟。
JavaScript这门语言中,最让人着迷的地方有三个:闭包、this和原型。针对大多数人,可以利用词法作用域等技巧避免直接使用this的坑,但生活不可能一直生活在舒适区,要敢于打破砂锅问到底。
JavaScript这门语言中,最令人迷惑的地方有三个,闭包、this、原型。针对大多数人,可以利用词法作用域等避开this的坑,但是我们不能一直生活在舒适区,要敢于打破砂锅问到底,对我们来说也是一种提升。
一、一般对this关键字的误解:
1、this指向函数自身
2、this指向函数词法作用域
我们可以看以下一段代码:
function test() { test.a = 1; this.a = 2; console.log(test.a); console.log(this.a); console.log(test.a === this.a); } test(); console.dir(test);
在上面这段代码中,我们在全局声明一个方法test,给test中的a属性赋值1,当前方法中的this中的a属性赋值2,加入this指向函数自身,那么test.a === this,a并且都等于2.
下面我们来看下这段代码的运行结果:
从上可以看出,scopes为全局作用域window,this也指向这里,虽然函数本身也是一个对象,但是this并不指向这里。
有一点我们一定要记住,this是在运行时进行绑定的,并不是在编写时绑定的,它的上下文取决于函数调用时的各种条件。this的绑定和函数声明的位置没有任何关系,只取决于函数的调用方式。
本文共计1203个文字,预计阅读时间需要5分钟。
JavaScript这门语言中,最让人着迷的地方有三个:闭包、this和原型。针对大多数人,可以利用词法作用域等技巧避免直接使用this的坑,但生活不可能一直生活在舒适区,要敢于打破砂锅问到底。
JavaScript这门语言中,最令人迷惑的地方有三个,闭包、this、原型。针对大多数人,可以利用词法作用域等避开this的坑,但是我们不能一直生活在舒适区,要敢于打破砂锅问到底,对我们来说也是一种提升。
一、一般对this关键字的误解:
1、this指向函数自身
2、this指向函数词法作用域
我们可以看以下一段代码:
function test() { test.a = 1; this.a = 2; console.log(test.a); console.log(this.a); console.log(test.a === this.a); } test(); console.dir(test);
在上面这段代码中,我们在全局声明一个方法test,给test中的a属性赋值1,当前方法中的this中的a属性赋值2,加入this指向函数自身,那么test.a === this,a并且都等于2.
下面我们来看下这段代码的运行结果:
从上可以看出,scopes为全局作用域window,this也指向这里,虽然函数本身也是一个对象,但是this并不指向这里。
有一点我们一定要记住,this是在运行时进行绑定的,并不是在编写时绑定的,它的上下文取决于函数调用时的各种条件。this的绑定和函数声明的位置没有任何关系,只取决于函数的调用方式。

