不明白为什么js中this的指 ?

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    
  </head>
  <body>
    <div id="example"></div>
    <script type="text/javascript">
      function add(){
        var ss = '3';
        function odd(){
          console.log(this);
          return '1';
        }
        odd();
      }
      add();
    </script>
  </body>
</html>

为什么这里的this 指向 window ? 我是看到作用域链的时候,实际在调用odd方法时创建了上下文,this为什么指向window?

阅读 3.5k
4 个回答

首先要清楚 odd 并不是一个方法,只有当函数作为对象的属性调用时,才称之为方法

//方法
o.add();

//函数
add();
  • 当函数作为方法被调用时 this 的指向是调用函数的对象(除非显式的被修改)

  • 当函数直接被调用时 this 指向 window(在严格模式中指向 undefined)


补充:

  • 当函数作为构造函数被调用时(使用new), this指向一个新对象,这个新对象的原型指向构造函数的prototype属性

//构造函数
new Add();
新手上路,请多包涵

函数如果不是使用 new 运行或者是使用 applycallbind 方法的话,this都指向全局对象(有的环境没window所以这么说)
你要指向的话请 new odd();

this永远都指向调用该方法的对象

这里要搞明白函数的定义:包括在花括号的代码块。既然是代码块,又不是构造函数creat一个新对象,那么再复杂的函数,里面的this也指向全局对象

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