闭包的实现原理和作用、以及内存泄露
一、闭包的实现原理和作用,可以列举几个开发中闭包的实际应用 1、 闭包的概念 :指有权访问另一个函数 中的变量的函数,一般情况就是在一个函数中包含另一个函数。 2、 闭包的作用 :访问函数内部变量、保持函数在环境中一直存在,不会被 机制处理 因为函数内部声明 的变量是局部的,只能在函数内部访问到,但是函数外部的变量是对函数内部可见的,这就是作用域链的特点了。 子级可以向父级查找变量,逐级查找,找到为止 因此我们可以在函数内部再创建一个函...
函数柯里化:三行代码实现 add(1)(2)(3)
柯里化有什么作用 主要有3个作用: 参数复用 、 提前返回 和 延迟执行 我们来简单的解释一下: 参数复用:拿上面 这个函数举例,只要传入一个参数 ,执行,计算结果就是 的结果,1 和 2 这两个参数就直接可以复用了。 提前返回 和 延迟执行 也很好理解,因为每次调用函数时,它只接受一部分参数,并返回一个函数(提前返回),直到(延迟执行)传递所有参数为止。
instanceof 和 typeof 的实现原理
typeof 实现原理 一般被用于判断一个变量的类型,我们可以利用 来判断 , , , , , , 这七种类型,这种判断能帮助我们搞定一些问题,比如在判断不是 object 类型的数据的时候, 能比较清楚的告诉我们具体是哪一类的类型。但是,很遗憾的一点是, 在判断一个 object的数据的时候只能告诉我们这个数据是 object, 而不能细致的具体到是哪一种 object, 比如👉 要想判断一个数据具体是哪一种 object 的时候,...
浅谈Object.prototype.toString.call(obj)功能及原理
Object.prototype.toString.call(obj)的功能 可能作为程序员以及即将迈入程序员门槛的小伙伴都知道 方法,功能简单但是确是类型检测界的“扛把子”。 首先来讲,对刚接触的人来说,我们为什么要使用这种奇怪的方法呢? 也可以检测类型,然而它有什么优势?我们来引入一道JavaScript的题目来参考: 使用 检测 变量“bar”是否为对象有什么缺点?如何避免? 缺点很明确,typeof可以准确的检测bar是否为对象...
call()、apply()、bind()用法和区别
1\. call() 语法: fun: 表示一个函数 thisArg: this要指向的对象,如果是null 和 undefined,则指向window全局对象; 从arg1开始,都是要给fun传递的参数。 特性: 会立即调用fun函数; call 方法将一个函数的对象上下文从初始的上下文改变为由 thisArg 指定的新对象,如果没有提供 thisArg 参数,那么 Window对象被用作 thisArg; 将arg1等参数传递进fu...
从原型到原型链
构造函数创建对象 我们先使用构造函数创建一个对象: 在这个例子中,Person 就是一个构造函数,我们使用 new 创建了一个实例对象 person。 很简单吧,接下来进入正题: prototype 每个函数都有一个 prototype 属性,就是我们经常在各种例子中看到的那个 prototype ,比如: 那这个函数的 prototype 属性到底指向的是什么呢?是这个函数的原型吗? 其实,函数的 prototype 属性指向了一个对...
前端跨页面通信
引言 在浏览器中,我们可以同时打开多个Tab页,每个Tab页可以粗略理解为一个“独立”的运行环境,即使是全局对象也不会在多个Tab间共享。然而有些时候,我们希望能在这些“独立”的Tab页面之间同步页面的数据、信息或状态。 正如下面这个例子:我在列表页点击“收藏”后,对应的详情页按钮会自动更新为“已收藏”状态;类似的,在详情页点击“收藏”后,列表页中按钮也会更新。 <img width="676" height="434" src=".....
前端路由的两种模式:hash模式和 history模式
为什么要使用路由 现在的网络应用程序越来越多的使用 异步请求完成页面的无缝刷新,导致浏览器的URL不会发生任何变化而完成了请求,从而破换了用户浏览体验。同时本次浏览的页面内容在用户下次使用URL访问时将无法重新呈现,使用路由可以很好地解决这个问题。 单页面应用利用了JavaScript动态变换网页内容,避免了页面重载;路由则提供了浏览器地址变化,网页内容也跟随变化,两者结合起来则为我们提供了体验良好的单页面web应用。 前端路由实现方式...
继承的多种方式和优缺点
1.原型链继承 问题: 1.引用类型的属性被所有实例共享,举个例子: 2.在创建 Child 的实例时,不能向Parent传参 2.借用构造函数(经典继承) 优点: 1.避免了引用类型的属性被所有实例共享 2.可以在 Child 中向 Parent 传参 举个例子: 缺点: 方法都在构造函数中定义,每次创建实例都会创建一遍方法。 3.组合继承 原型链继承和经典继承双剑合璧。 优点:融合原型链继承和构造函数的优点,是 JavaScript...