在javascript中对于this指向的再次理解
总所周知,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指向的再次理解的更多相关文章
- JavaScript中this指针指向的彻底理解
this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象 这一点与函数中自由变量Action-varibal不同 var ...
- javascript中this的指向
作为一个前端小白在开发中对于this的指向问题有时候总是会模糊,于是花时间研究了一番. 首先this是JS的关键字,this是js函数在运行是生成的一个内部对象,生成的这个this只能在函数内部使用. ...
- Javascript中的this指向。
一.JavaScript中的函数 在了解this指向之前,要先弄明白函数执行时它的执行环境是如何创建的,这样可以更清楚的去理解JavaScript中的this指向. function fn(x,y,n ...
- JavaScript中 this 的指向
很多人都会被JavaScript中this的指向(也就是函数在调用时的调用上下文)弄晕,这里做一下总结: 首先,顶层的this指向全局对象. 函数中的this按照调用方法的不同,其指向也不同: 1.函 ...
- 前端面试之JavaScript中this的指向【待完善!】
JavaScript中this的指向问题! 另一个特殊的对象是 this,它在标准函数和箭头函数中有不同的行为. 在标准函数中, this 引用的是把函数当成方法调用的上下文对象,这时候通常称其为 t ...
- JavaScript中this究竟指向什么?
摘要: 神奇的this! 原文:JS 中 this 在各个场景下的指向 译者:前端小智 Fundebug经授权转载,版权归原作者所有. 1. this 的奥秘 很多时候, JS 中的 this 对于咱 ...
- 灵活的理解JavaScript中的this指向(一)
this是JavaScript中的关键字之一,在编写程序的时候经常会用到,正确的理解和使用关键字this尤为重要.首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确 ...
- JavaScript中的this指向
this是谁 技术一般水平有限,有什么错的地方,望大家指正. this代指当前对象super调用父类的构造函数,应表会运网数物,加载驱动建立链接执行SQL处理结果,直到现在每想起这三点就能想起我上大学 ...
- Javascript 中的this 指向的对象,你搞清楚了吗?
Javascript 中的this 总让人感到困惑,你能分清以下三种test1(),test2(),test3() 情况下的输出吗? 注:以下Javascript运行环境中为浏览器 //1 this在 ...
随机推荐
- vue中slot的用法案例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Eclipse中执行Ant脚本出现Could not find the main class的问题及解
试过了:https://blog.csdn.net/bookroader/article/details/2300337 但是不管用,偶然看到这篇没有直接关系的 https://blog.csdn.n ...
- Sublime 是自动检测而非自动设置缩进
以为是自动设置规范化的缩进 以前一直认为是:识别出文件类型后,设置统一的缩进规范.比如说 识别为CSS,就把缩进设成2个空格 其实是自动检测然后与你保持统一 亲测发现,根据你文本里用的是几个空格的缩进 ...
- C++中关于文本内容的实用操作集合(新)(添加一些关于文件流的介绍)
首先先给大家一个链接:http://baike.baidu.com/view/1679747.htm 主要是关于ios的使用,头文件要include<ios>,然后就可以调用下面的一些操作 ...
- XMind双十一会放什么大招?
XMind一直是一款备受欢迎的思维导图软件,同时也是一款开源思维导图软件,以强大的免费功能为支持,向用户提供极致的使用体验.XMind现在分别有XMind免费版(XMind Free),XMind专业 ...
- luogu P3391 【模板】文艺平衡树(Splay) 非旋转treap
Code: #include<bits/stdc++.h> using namespace std; void setIO(string s) { string in=s+".i ...
- Parameter ‘brOrderNo’ not found
org.apache.ibatis.binding.BindingException: Parameter 'brOrderNo' not found. Available parameters ar ...
- POJ 1883 排序 ( 水 + next_permutation )
链接:传送门 题意:略 思路:next_permutation(),水,但是要注意一点的是如果是最后一个排列next_permutation会返回第一个排列并结束,所以如果到了最后一个排列还不是第k个 ...
- Linux学习01
Linux学习第一天 1.使用VM安装RHEL7.0 具体参见刘遄老师的<Linux就该怎么学>https://www.linuxprobe.com/chapter-01.html 2.R ...
- CF735E Ostap and Tree
比较毒瘤的树形DP,子状态难想.这是主要是搬运一篇题解. 用\(f[i][j]\)表示\(i\)的子树中离\(i\)最近黑点的距离为\(j\),且距离超过\(j\)的点都被满足的方案数.转移时新建一个 ...