为了账号安全,请及时绑定邮箱和手机立即绑定

关于this的又一个问题

关于this的又一个问题

呼如林 2019-03-21 18:14:58
本人正在看《你不知道的javascript上卷》,第80页其有关使用this来隐式引用函数的词法作用域错误代码如下:function foo(){  var a = 2;  this.bar();    //1}function bar(){  console.log(this.a);}foo();我在VS Code上将代码注释1处的this给删掉之后(如书中所说)发现尽管代码没有出错但是结果为undefined。在单步调试查看调用堆栈时是foo->bar,也就是按照我所想的bar()中this绑定到了foo函数对象上。百思不得其解之后在全局和bar函数中都另外再定义了不同值的a变量,然而结果还是undefined。。。突然想到是不是因为自动使用严格模式的原因,然而在各个浏览器控制台上测试同样是undefined的结果,无解。。。。。求助!!这个this到底绑定到哪里了!!
查看完整描述

7 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

this的作用域和它运行的环境有关,它指向调用某方法、对象的对象。比如这里,如果是node.js,就会一直指向global;如果是浏览器,就会一直指向window。不过node.js环境下,在最外面一层以var a = 1形式声明的变量,并不会绑定在node.js 的global上,以a = 1类似的方式声明。

查看完整回答
反对 回复 2019-04-01
?
慕虎7371278

TA贡献1802条经验 获得超4个赞

浏览器里面普通函数调用,this是window,node里面是global,全局环境的this浏览器还是window,node是module.exports this是谁只取决于函数怎么调用的


查看完整回答
反对 回复 2019-04-01
?
互换的青春

TA贡献1797条经验 获得超6个赞

  1. 在这个例子里,想在bar里面访问foo作用域中的变量是不可能的

  2. 在浏览器中,bar中的this指向全局变量。在node中不是


查看完整回答
反对 回复 2019-04-01
?
MMTTMM

TA贡献1869条经验 获得超4个赞

this是全局的window对象,a在你的foo方法里,是局部变量。所以是未定义。你可以看看这个,js this的四种场景


查看完整回答
反对 回复 2019-04-01
?
冉冉说

TA贡献1877条经验 获得超1个赞

bar中的thsi.a是没有的啊


查看完整回答
反对 回复 2019-04-01
  • 7 回答
  • 0 关注
  • 606 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信