闭包、typeof、手写instanceof、===

闭包

什么是闭包?

有权访问另一个函数作用域中的变量的函数;一般情况就是在一个函数中包含另一个函数。函数作用域是独立的、封闭的,外部的执行环境是访问不了的,但是闭包具有这个能力和权限。

第一,闭包是一个函数,而且存在于另一个函数当中

第二,闭包可以访问到父级函数的变量,且该变量不会销毁

闭包的原理?

闭包利用了作用域的特效,作用域就是在当前执行环境下访问某个变量时,如果不存在就一直向外层寻找,最终寻找到最外层也就是全局作用域,这样就形成了一个链。

由于全局变量容易被人修改,容易被污染,所以必须解决这个问题,那就是把变量封装到函数内,让它成为局部变量。        

闭包的作用?

作用1:隐藏变量,避免全局污染

作用2:可以读取函数内部的变量

同时闭包使用不当,优点就变成了缺点:

缺点1:导致变量不会被垃圾回收机制回收,造成内存消耗

缺点2:不恰当的使用闭包可能会造成内存泄漏的问题

typeof

typeof 返回一个表示数据类型的字符串,检测数据类型的运算符,返回值包括'undefined'、'boolean'、'string'、'number'、'object'、'function'、'function'、‘bigint’;。注意typeof(null)返回的是object。如果是判断一个基本的类型用typeof就是可以的。typeof 可以对JS基础数据类型做出准确的判断,而对于引用类型返回的基本上都是object, 其实返回object也没有错,因为所有对象的原型链最终都指向了Object,Object是所有对象的祖宗。

//typeof null返回的不是‘null’而是‘object’;因为null虽然是单独的一个数据类型,但是它原本的意思是空指针对象,浏览器使用typeof检测会把它按照对象来检测 
 typeof null === 'object'
 console.log(typeof NaN);   //'number'
 typeof !!(1) === 'boolean'; // 两次调用 ! (逻辑非) 操作符相当于 Boolean()
 typeof (typeof 1) === 'string'; // typeof 总是返回一个字符串
 typeof String(1) === 'string'; // String 将任意值转换为字符串,比 toString 更安全
 typeof !!(1) === 'boolean'; // 两次调用 ! (逻辑非) 操作符相当于 Boolean()
 typeof {a: 1} === 'object';

// 使用 Array.isArray 或者 Object.prototype.toString.call
// 区分数组和普通对象
 typeof [1, 2, 4] === 'object';

instanceof

instanceof 的作用是用来做检测类型的,检测一个对象A是不是另一个对象B的实例,A instanceof B ,是看B是否是在A的原型链上,代码如下:

var Person = function() {};
var student = new Person();
console.log(student instanceof Person);  // true

手写instanceof 

  function _instanceof(A, B) {
      var p_A = A.__proto__ //取A的隐式原型
      var p_B = B.prototype //取B的显式原型
      while (p_A != null) { //直到到达A的原型链顶端
        if (p_A === p_B) return true
        else p_A = p_A.__proto__
      }
      return false
    }
console.log(_instanceof(people, Person));

原理:判断构造函数的prototype属性是否出现在某个实例对象的原型链上

===

能用===判断类型的只有undefined和null

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值