美文网首页
js--this,严格模式下的this

js--this,严格模式下的this

作者: 栗子酥小小 | 来源:发表于2017-03-25 11:51 被阅读0次
  • 首先要明白,this指向是在创建函数上下文的时候创建的,也就是执行的时候。所以this永远都是指向调用它的那个对象。
  • 对于用户自定义的方法,所有的函数调用都可以转换成apply或call的形式,具体规则如下:
    • obj.child.method(p1, p2) 等价于obj.child.method.call(obj.child, p1, p2)
    • 非严格模式:foo(p1,p2) 等价于 foo.call( window, p1, p2)
    • 严格模式:foo(p1,p2) 等价于 foo.call( undefined, p1, p2)
注:这里只是针对用户自定义的方法,如果是JS内置的全局方法,如setTimeout,不论是setTimeout()还是window.setTimeout()形式的调用,回调函数内部的this都会指向window
  • 例如:
    function fn() {
    console.log(this);
    }
    fn(); // window对象
    window.fn(); // window对象

    • 解析:在普通模式下,this指向undefined时会被转向window,所以第一个函数的this指向的是window,第二个函数不用多说很明显。
  • 严格模式下,this指向undefined时不会转向window:
    function fn() {
    'use strict';
    console.log(this);
    }
    fn(); // undefined, fn是调用者,独立调用,
    window.fn(); // window, fn是调用者,被window所拥有

一些可能需要快速记忆一下的地方:
  • setTimeout(fn,1000)中的fn中的this,永远都是指向window对象,无论是否严格模式。
  • 回调函数中,this指向的是((调用该回调函数)的函数)的调用对象
    • 例如:$("button").click( fn ) // fn里如果有this,指向的是button的DOM对象

相关文章

  • js--this,严格模式下的this

    首先要明白,this指向是在创建函数上下文的时候创建的,也就是执行的时候。所以this永远都是指向调用它的那个对象...

  • JavaScript this

    全局下this 非严格模式/严格模式 window 函数内this 非严格模式 window 严格模式 undef...

  • js中this/作用域

    this 问题总结 默认绑定(函数直接调用) 非严格模式下: 严格模式下: TIP1 ? 非严格模式下,默认绑定指...

  • JS基本类型和变量

    严格模式 ECMAScripr5引入了严格模式。启用严格模式可以在顶部添加: “use strict” 严格模式下...

  • 开发中的严格模式

    js中有严格模式和非严格模式两种运行环境 在开发中,有非严格模式和严格模式2种开发模式 在严格模式下,会做更加严格...

  • JavsScript严格模式

    严格模式 严格模式(strict mode):使 JavaScript 代码在更加严格的条件下运行。严格模式不仅仅...

  • JS严格模式知识点总结

    1.严格模式下没有全局变量a="test"严格模式下会报错,非严格模式下正常 2.删除变量var 有三种声明的情形...

  • Vuex严格模式

    严格模式 开启严格模式,仅需在创建 store 的时候传入 strict: true: 在严格模式下,无论何时发生...

  • web前端-js基础-javascript高级程序设计(第三版)

    严格模式和非严格模式的区别 'use strict' 严格模式下声明变量的时候必须带上var, 否则会报Refer...

  • JS-严格模式、关键字和保留字、var操作符、数据类型

    严格模式 严格模式是为JavaScript定义了一种不同的解析与执行模型。在严格模式下,ECMAScript3中的...

网友评论

      本文标题:js--this,严格模式下的this

      本文链接:https://www.haomeiwen.com/subject/dydxottx.html