2021-04-21

  1. 证明函数是对象
function foo() {}
foo instanceof Object // true
  1. 每个函数都是一个 Function 对象
function foo() {}
foo instanceof Function // true
  1. 任何对象都是函数创建的
var s = ''; // var s = new String('');
var n = 0; // var s = new Number(0);
var arr = []; // var arr = new Array([]);
var obj = {}; // var obj = new Object({});
function sum(a, b) { // const sum = new Function('a', 'b', 'return a + b');
  return a + b;
};  

函数与对象的关系

  1. console.log(Function instanceof Function):输出 true,原因:Function.__proto__ == Function.prototype
  2. console.log(Function instanceof Object ):输出 true,原因: Function.__proto__ == Function.prototype,而 Function.prototype.__proto__ == Object.prototype;instance 操作符会沿着原型链向上查找,所以结果为 true
  3. console.log(Object instanceof Function):输出 true,原因:Object 是一个函数,函数都是由 Function 创建,所以 Object.__proto__ == Function.prototype

闭包

当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使函数是在当前词法作用域之外执行。

function foo() {
  var a = 2;

  function bar() {
    console.log(a);
  }
  return bar;
}

bar() 依然持有对 foo 作用域的引用(因此 foo 作用域在函数执行完之后不会被垃圾回收),而这个引用就叫闭包
只要使用了回调函数,实际上就是在使用闭包

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、js的数据类型: 分类: 基本类型(5种),引用类型 基本(值)类型 ,保存在栈中: String:...
    Shy啊阅读 302评论 0 3
  • 1.对象是什么 对象就是若干属性的集合。 在JS中一切引用类型都是对象:数组是对象,函数是对象,对象还是对象。对象...
    liushaung阅读 1,228评论 0 2
  • 基本信息 es6中const定义的属性是否可以改变? 可以的,为什么会这样呢?这是由于对象或者数组属于引用数据类。...
    习惯就好a阅读 8,635评论 0 1
  • 本博客转自:「作者:若愚链接:https://zhuanlan.zhihu.com/p/22361337来源:知乎...
    韩宝亿阅读 2,826评论 0 3
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,624评论 0 11