前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在javascript中对于this指向的再次理解

在javascript中对于this指向的再次理解

作者头像
Theone67
发布2019-11-21 12:45:05
1.2K0
发布2019-11-21 12:45:05
举报

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

代码语言:javascript
复制
<script>
var length = 3;
function fn () {
  console.log(this.length)
}
fn();

</script>

  函数调用是在最外层发生的,那么由于全局对象this的存在,那么函数体内的this指向的就是window对象。在浏览器环境下,全局变量和window对象的属性是等价的,所以定义了length全局变量就相当于向window对象添加了一个length属性。即上面代码的输出结果是3

下面我们再看一个例子

代码语言:javascript
复制
<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!!!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-05-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档