• 微信号:Zh-y9213
您当前的位置:爱资源分享网 > > 网站源码 > 教程合集

了解Javascript的关键字This

栏目:教程合集时间:2022-07-20 15:25阅读数:55人阅读

首先,我们要知道this是什么。它的含义。通俗的来说, this首先是一个对象,其次要知道的是this不是由它本身出现在何处来决定的。

而是由调用它的对象来决定的,可以简单的理解为。是谁调用了this,那么this便代表谁。比如在全局作用域中调用this。那么此时的this便代表着全局变量。

例:

console.log(this === window)

如上文说所的来分析,如是在全局作用域中。this则代表着全局变量。也就是window,那么事实是不是这样呢。运行上面的代码,输出true。证明this的却是window.

如果this是在一个对象中出现,那么正常情况下。this则代表该对象。

例:


var obj = {
      fn:function(){
            console.log(this === obj);
    }
}
 
 
obj.fn();//true
 

弄明白了这两点,this的真相似乎已经浮出水面了。下面我们来看一个复杂点的例子。相信有很多人都会犯错,同时这也是一道经典的面试题。


var length = 20;
function fn(){
        console.log(this.length);
}
 
 
var o = {
length:10,
e:function (fn){
        fn();
      arguments[0]();
}
}
 
o.e(fn);
 

相信有不少的同鞋会认为让面会输出 20,20; 也有少部分人认为是10,10; 或者20 10,10 20;

但是很遗憾,上面的答案全部错误。先不急着公布正确答案,我们来分析一下,看看在运行中this到底代表什么。

当运行o.e(fn);时,e中的this代表着o。因为是o调用了e。这点相信大家都没有疑问。

当进入e时。执行fn(); 此时的fn也就是参数传递进来的fn,由于函数名只是保存了一个指向函数的引用。所以此时e内部的fn与外面的fn是一模一样的。又因为函数内部的this是由函数的调用者决定的。所以此时fn内的this代表了window。这点相信当家也没有疑问。

当执行arguments[0]()时,由于arguments[0]是函数的第一个参数,等于fn。所以此时的函数也就等于外部的fn,理论上来说this也应该是等于window的。

似乎这么解释是合理的。 那么正确答案就应该是20,20.那么我又为何说上面的答案中没有一个是正确的呢。那是因为我们忽略了一点。那就是,arguments。

由于arguments[0]().相当与arguments.0(); 也就是说,正真调用fn的是arguments。所以函数内部的this应该是arguemnts,所以。this.length 等于参数的个数,也就是1.正确答案是20 1.

相信大家都明白了吧,那么下面我们就来看看是什么样的机制造就了this。

首先,当一个函数被运行时。他都会进入一个新的执行环境,就算是同一个函数两次调用,异或是函数自身递归调用,它们所进入的执行环境都是不同的。

当进入这个执行环境的时候,就会创建一个活动对象,并且关联到执行环境中。并且随之确定函数的作用域链,this等。所以this的值与它在那里出现没有关联。反而跟函数的调用者有关。

所以,只要记住。this就是调用函数的那个对象。那么this就不会在被this相关的问题给难住啦~


资源均来自第三方,谨慎下载,前往第三方网站下载

本站所有文章、数据、图片均来自互联网,一切版权均归源网站或源作者所有。

如果侵犯了你的权益请来信告知我们删除。邮箱:737597453@qq.com