JavaScript: function内部的两个特殊对象

  • arguments
    这个对象主要用来存放函数的参数,但是他还有一个特殊的属性,callee,他是一个指针,指向拥有这个arguments属性的函数。
    这是一个很好的,用于解耦的属性,比如经典阶乘函数:
function factorial(num){
    return num <=1 ? 1 : num * factorial(num-1); 
}
//当将这个函数指针赋值给另外的变量,清除原来的函数指针,就会表现出他的耦合性
var temp = factorial;factorial = null;
temp();  //出问题
//利用callee解耦
function factorial(num){
    return num <=1 ? 1 : num * arguments.callee(num-1); 
}

PS:在严格模式下是不能调用callee属性(还有caller属性,用于输出谁调用了拥有该caller属性的函数)的:


Paste_Image.png
  • this
    this引用的是函数执行的环境对象。换句话可以说,函数属于哪个对象的,那么该函数this对象引用的就是这个对象(PS:在页面的全局作用域中调用函数时,this对象引用的是window对象)。
window.color = "red";
var obj = { color: "blue" };
function sayColor(){
    console.log(this.color);
}
sayColor();    //输出red
obj.sayColor = sayColor;
obj.sayColor();    //输出blue
//这里说函数内的this对象引用的是window对象,要和使用构造函数模式常见对象的函数区别:
function Person(name, age){
  this.name - name;
  this.age = age;
  this.sayName = function(){
    console.log(this);
  }
}
var person1 = new Person('a', 18);
//如果你直接调用Person这个构造函数,this对象引用的还是window对象,但
//是用new操作符新建一个实例,就相当于构造了一个Person对象,因此这个
//时候的this对象引用的是Person对象
person1.sayName();  //打印的是Person对象
Paste_Image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 函数和对象 1、函数 1.1 函数概述 函数对于任何一门语言来说都是核心的概念。通过函数可以封装任意多条语句,而且...
    道无虚阅读 10,180评论 0 5
  • 元素位置 一般惯例是在 元素中包含所有的 元素,但是这就意味着必须等到全部的javascript代码都被下载、解析...
    wyude阅读 1,468评论 0 0
  • 本文档内容参考 《JavaScript 闯关记》之函数 函数是一段代码,它只定义一次,但可以被执行或调用任意次。在...
    穿越人海遇见你阅读 4,620评论 0 1
  • 函数的一些内部属性 1.arguments arguments保存了函数的参数,是一个类数组对象。该对象有一个属性...
    xiaoxiaokun阅读 3,788评论 0 1
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,771评论 0 4

友情链接更多精彩内容