总所周知,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!!!

最新文章

  1. Android中后台的劳动者“服务”
  2. 【Swift】 应用内显示 AppStore 某个应用的详情
  3. 淘宝前端工程师:国内WEB前端开发十日谈
  4. Android TextView里显示两种颜色
  5. Python 之WEB框架
  6. iOS - Sign up/in 注册/登录
  7. Atom markdown .md 编写格式技巧
  8. 前端自动化构建工具——gulp
  9. SQL数据类型介绍
  10. 圆角和圆形ImageView
  11. HDU 2845 Beans (动态调节)
  12. 初识mongo
  13. sql语句删除由于无主键导致完全重复的数据方法
  14. python迭代器生成器(一)
  15. 客户端无法加入域,报错:“无法与域‘xxx.com’的Active Directory域控制器(AD DC)链接” 请确保键入的域名正确
  16. 前端axios下载excel(二进制)
  17. 《机器学习实战》之k-近邻算法(手写识别系统)
  18. NRF51822之使用外部32Mhz晶振
  19. 第六章&#160;图(a)概述
  20. Linux 修改mac 地址方法记录

热门文章

  1. jquery应用实例1:手风琴特效
  2. Spinner与适配器模式总结
  3. (转载)Android项目实战(三十二):圆角对话框Dialog
  4. 互联网智能门锁,手机蓝牙APP成为首选
  5. DB2导出表结构、表数据小结
  6. [转]opencv学习资料
  7. 关于函数调用约定-thiscall调用约定
  8. laydate日期范围控制
  9. iOS开发——GPUImage源码解析
  10. Linux mysql-5.7.17安装 教程