js中this指向问题

"use strict"
var a = 2;
var qq = function() {
    var a = 1;
    console.log(this);
    console.log(this.a);
}
qq();
  1. 这里的this指向是谁?为什么不是windows呢?
  2. 在"use strict"模式下,为什么使用下面这种命名函数的方法会报错呢?怎样解决?

    "use strict"
    var a= 2;
    function qq(){
    var a = 1;
    console.log(this);
    console.log(this.a);
    }
    qq();

麻烦啦

阅读 4.1k
5 个回答

1、严格模式指向undefined,不是window,因为严格模式不会自动用apply去绑定this的指向。
2、还有这是不会报错的,你报错的原因是不是你的严格模式外面的双引号是中文的原因。。。。。

1,这里的this就是window。
2,“use strict”是严格模式,参考这里
“在严格模式下通过this传递给一个函数的值不会被强制转换为一个对象。对一个普通的函数来说,this总会是一个对象:不管调用时this它本来就是一个对象;还是用布尔值,字符串或者数字调用函数时函数里面被封装成对象的this;还是使用undefined或者null调用函数式this代表的全局对象(使用call, apply或者bind方法来指定一个确定的this)。这种自动转化为对象的过程不仅是一种性能上的损耗,同时在浏览器中暴露出全局对象也会成为安全隐患,因为全局对象提供了访问那些所谓安全的JavaScript环境必须限制的功能的途径。所以对于一个开启严格模式的函数,指定的this不再被封装为对象,而且如果没有指定this的话它值是undefined”

  1. this指向的是undefined。 因为是严格模式。如果把第一行去掉,才是window
  2. 我这里并没有报错,除了你的双引号外
  1. this指向undefined,严格模式下全局作用域不是window,是undefined
  2. 不会报错

谢谢各位啦,我自己搞错了 没问题了。。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题