总所周知,function () {}函数体内的this对象指向的是调用该函数的对象,那么我们看一下这个例子

<script>
var length = 3;
function fn () {
console.log(this.length)
}
fn(); </script>

  函数调用是在最外层发生的,那么由于全局对象this的存在,那么函数体内的this指向的就是window对象。

在浏览器环境下,全局变量和window对象的属性是等价的,所以定义了length全局变量就相当于向window对象

添加了一个length属性。即上面代码的输出结果是3

下面我们再看一个例子

<script>
var length = 10;
function fn() {
console.log(this.length);
}
function test(fn) {
fn();
arguments[0]();
}
test(fn, 3); </script>

  第一个输出的结果是10,大家应该都知道。第二个的输出结果是2!!!为什么呢?这里还要强调上面说的那句话

function () {}函数体内的this对象指向的是调用该函数的对象。在function函数体内的有一个很神奇的对象arguments

这个对象是由调用该函数时所传的实参决定的,而不是由定义函数时由形参决定的。这一点也是javascript语言广为诟病的一

点,无法依据定义函数的形参个数来实现方法的重载,只能靠argumengs的length属性来实现。所以在上面例子中,fn 和 3

这两个变量都挂载在arguments对象下面,还由于arguments是一个类数组对象所以它有length属性,也可以像使用数组一样

来使用arguemnts。即可以arguments[0]指向arguments的第一个属相,在上例中就指向了fn函数,fn函数体内的this就指向

了arguments对象,所以第二次打印出2!!!

在javascript中对于this指向的再次理解的更多相关文章

  1. JavaScript中this指针指向的彻底理解

    this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象 这一点与函数中自由变量Action-varibal不同 var ...

  2. javascript中this的指向

    作为一个前端小白在开发中对于this的指向问题有时候总是会模糊,于是花时间研究了一番. 首先this是JS的关键字,this是js函数在运行是生成的一个内部对象,生成的这个this只能在函数内部使用. ...

  3. Javascript中的this指向。

    一.JavaScript中的函数 在了解this指向之前,要先弄明白函数执行时它的执行环境是如何创建的,这样可以更清楚的去理解JavaScript中的this指向. function fn(x,y,n ...

  4. JavaScript中 this 的指向

    很多人都会被JavaScript中this的指向(也就是函数在调用时的调用上下文)弄晕,这里做一下总结: 首先,顶层的this指向全局对象. 函数中的this按照调用方法的不同,其指向也不同: 1.函 ...

  5. 前端面试之JavaScript中this的指向【待完善!】

    JavaScript中this的指向问题! 另一个特殊的对象是 this,它在标准函数和箭头函数中有不同的行为. 在标准函数中, this 引用的是把函数当成方法调用的上下文对象,这时候通常称其为 t ...

  6. JavaScript中this究竟指向什么?

    摘要: 神奇的this! 原文:JS 中 this 在各个场景下的指向 译者:前端小智 Fundebug经授权转载,版权归原作者所有. 1. this 的奥秘 很多时候, JS 中的 this 对于咱 ...

  7. 灵活的理解JavaScript中的this指向(一)

    this是JavaScript中的关键字之一,在编写程序的时候经常会用到,正确的理解和使用关键字this尤为重要.首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确 ...

  8. JavaScript中的this指向

    this是谁 技术一般水平有限,有什么错的地方,望大家指正. this代指当前对象super调用父类的构造函数,应表会运网数物,加载驱动建立链接执行SQL处理结果,直到现在每想起这三点就能想起我上大学 ...

  9. Javascript 中的this 指向的对象,你搞清楚了吗?

    Javascript 中的this 总让人感到困惑,你能分清以下三种test1(),test2(),test3() 情况下的输出吗? 注:以下Javascript运行环境中为浏览器 //1 this在 ...

随机推荐

  1. TESTUSERB 仅能对TESTUSERA 用户下的某些表增删改查、有些表仅能对某些列update,查询TESTUSERB 用户权限,获取批量赋予语句。

    TESTUSERB 仅能对TESTUSERA 用户下的某些表增删改查.有些表仅能对某些列update,查询TESTUSERB 用户权限,获取批量赋予语句. select 'grant '|| PRIV ...

  2. ZBrush通过绘制层得到子物体

    本文将为大家介绍在ZBrush® 软件中第三种创建子物体的方法,即使用绘制层得到子物体. 1.在Light Box(灯光盒子)默认的3D工具中选择SuperAverageMan_low人体模型,在视图 ...

  3. ZBrush软件特性之Layers

    ZBrush®中的Layers层调控板可以在单个文档工作中添加多个层,实际上是把新建的层作为一个分离的文档,层之间可以相互影响. 使用层工作 Layers调控板为每个层都有预置存放的空间,刚启动ZBr ...

  4. hdu 1080 dp(最长公共子序列变形)

    题意: 输入俩个字符串,怎样变换使其所有字符对和最大.(字符只有'A','C','G','T','-') 其中每对字符对应的值如下: 怎样配使和最大呢. 比如: A G T G A T G -  G ...

  5. 在Windows环境下使用短信猫收发短信的简单配置:

    Windows简单配置: 1.插入usb接口,打开电脑的设备管理器,装驱动后,查看端口下设备的com(串口)是多少,接下来就是配置短信猫的必须参数: 如果短信猫是COM(串口)口的,一般端口是COM1 ...

  6. Prime Distance POJ - 2689 线性筛

    一个数 $n$ 必有一个不超过 $\sqrt n$ 的质因子. 打表处理出 $1$ 到 $\sqrt n$ 的质因子后去筛掉属于 $L$ 到 $R$ 区间的素数即可. Code: #include&l ...

  7. 工作需求——VBA操作打印机

    因为最近做的事情比较多,平时也多用EXCEL,所以顺便学习EXCEL的功能性的东西 转载:https://msdn.microsoft.com/zh-tw/vba/excel-vba/articles ...

  8. vuex存储和本地存储的区别

    1.实质的区别 vuex存的是状态,存储在内存,localstorage是浏览器提供的接口,让你存的是文件,以文件的形式存储在本地 2.应用场景 vuex用于组件之间的传值,localstorage则 ...

  9. 在join中,on和where的区别

    两个表在,join时,首先做一个笛卡尔积,on后面的条件是对这个笛卡尔积做一个过滤形成一张临时表,如果没有where就直接返回结果,如果有where就对上一步的临时表再进行过滤. 在使用left  j ...

  10. GitHub上搭建私人hexo博客操作教程

    GitHub上搭建hexo博客 安装GitGit:主要用于上传博客页面到github和命令操作安装NodeNode.js:Hexo的运行环境安装HexoHexo:博客程序打开安装Git后的生成的右键菜 ...