美文网首页
this指向总结:严格模式和非严格模式

this指向总结:严格模式和非严格模式

作者: 成都reactnative | 来源:发表于2018-09-07 15:06 被阅读0次

函数中的this指向和当前函数在哪定义和在哪执行的没有任何的关系

分析this指向的规律如下:

【非严格模式下】

1.自执行函数中的this永远都是window

【案例1】

var obj = {

  fn:(function(i){

    //this->window

    return function () {

      //this->obj

    }

  })(0)

}

2.给元素的某个行为绑定一个方法,当行为触发的时候,执行绑定的方法,此时方法中的this是当前元素

【案例1】

oDiv.onClick = function () { // this->oDiv}

【案例2】

function fn() {

  //this->window

}

oDiv.onClick = function () {

  //this->oDiv

  fn();

}

3.方法执行,看方法名前面是否有“.”,有的话,“.”前面是谁this就是谁,没有的话this就是window

【案例1】

var obj = { fn:fn };

function fn() {}

fn.prototype.aa = function (){};

var f = new fn

fn(); // this=window

obj.fn(); //this=obj

fn.prototype.aa(); // this->fn.prototype

f.aa(); // this=f

f.__proto__.aa(); // this->f.__proto__ ->fn.prototype

4.在构造函数中,函数体中的this.xxx = xxx中的this是当前类的一个实例

【案例1】

function Fn() {

  this.x = 100; // this->f

  this.getX = function() {

    console.log(this); // this->f 因为getX方法执行的时候,“.”前面是f,所以this是f

  }

var f = new Fn;

f.getX()

5.使用call/apply来改变this的指向(一旦遇到call/apply上述四条都没用了)

【严格模式】

“use strict”; // 告诉浏览器我们接下来编写的JS代码采用严格模式

1.只执行函数中的this永远是undefined

【案例1】

var obj = {

  fn:(function(i){

    // this->undefined

    return function () {

      // this->obj

    }

  })(0)

}

obj.fn();

2.方法执行,看方法名前面是否有“.”,有的话,“.”前面是谁this就是谁,没有的话this是undefined

【案例1】

var obj = {fn:fn}

function fn () {}

fn();// this->undefined

obj.fn() // this->obj

我们发现严格模式下的this相对于非严格模式下的this的主要区别在于:对于JS代码中没有写执行主体的情况下,非严格模式默认都是window执行的,所以this指向的是window,但是在严格模式下,没有写执行主体,this指向是undefined;

相关文章

  • this指向总结:严格模式和非严格模式

    函数中的this指向和当前函数在哪定义和在哪执行的没有任何的关系 分析this指向的规律如下: 【非严格模式下】 ...

  • 2019面试总结

    一、 this指向问题 全局环境:(严格模式和非严格模式)浏览器环境: windownode 环境: global...

  • 严格模式和非严格模式

    es6添加了严格模式("use strict")主要作用: 1.严格模式通过抛出错误来消除一些原有的静默错误。 2...

  • 严格模式this

    在严格模式下,在全局作用域中,this指向window对象(和非严格模式一致) 对象的函数中的this指向调用函数...

  • 开发中的严格模式

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

  • js中this/作用域

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

  • js中this

    this是在函数调用时,才明确指向 看调用this的函数,若是独立的,严格模式中undefined,非严格模式指向...

  • javaScript中this的指向

    简单笔记: this永远指向调用它的对象,在严格模式下没有调用对象会指向undefined,非严格模式下指向全局变...

  • JavaScript this

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

  • 面向对象-严格模式、作用域

    严格模式 js有两中开发模式:非严格模式(默认)+严格模式(“ues strict”) 严格模式:会进行更严格的代...

网友评论

      本文标题:this指向总结:严格模式和非严格模式

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