六个字说清楚JavaScript中this的要点在前端学习和工作中,我们经常会遇到this的使用,尤其是this的要点。正如您在MDN中看到的,对此的解释相对简单:当前执行上下文(global、function或eval)的一个属性在非严格模式下总是指向一个对象,而在严格模式下可以是任意值。我们先来看几个例子。1.普通函数的this指向varname='test'functionfn(){console.log(this.name)}fn();//'test'2.当一个对象函数被调用时This指向varname='test'lettom={name:'test2',fn:function(){console.log(this.name)}}tom.fn();//'test2'3、构造函数This调用时指向letStudent=function(name){this.name=name}lettom=newStudent('tom')console.log(tom.name)//'tom'4、this调用箭头函数时指向varname='666'lettest={name:'777',fn:()=>{console.log(this.name)}}console.log(test.fn())//'666'in在非严格模式下,我们可以看到前三个调用方法可以这样理解:谁调用,谁指向第一个方法,fn方法其实是一个全局的global方法,我们调用global.fn获取对应的global的name属性。对于第二种方法,就是获取obj对应的name属性。对于第三种方法,我们使用new关键字创建tom对象,然后自然而然地给tom赋值。箭头函数比较特殊,我们要知道,箭头函数并没有绑定this,而是将其上下文的this值捕获为自己的this值。让我们稍微改变一下最后一个例子,看看输出是什么?varname='666'lettest={name:'777',fn:{name:888,fn:()=>{console.log(this.name)}}}console.log(test.fn.fn())//有的同学可能不明白'666',这里为什么不输出888。具体我们下面分享一下,js中的作用域是什么?明天见!
