arguments 一个用于被 constructor 调用的参数列表。...使用指定的参数调用构造函数 Foo,并将 this (opens new window) 绑定到新创建的对象。...new Foo 等同于 new Foo(),也就是没有指定参数列表,Foo 不带任何参数调用的情况。 由构造函数返回的对象就是 new 表达式的结果。...car1.color); // "red" console.log(car2.color); // "default color" 如果没有使用 new 运算符, 构造函数会像其他的常规函数一样被调用
当这些情况之一发生时,我们用 promise 的 then 方法排列起来的相关处理程序就会被调用。...如果 promise 在一个相应的处理程序被绑定时就已经被兑现或被拒绝了,那么这个处理程序就会被调用,因此在完成异步操作和绑定处理方法之间不会存在竞争状态。...这些方法还会返回一个新生成的 promise 对象,这个对象可以被非强制性的用来做链式调用。...当异步任务顺利完成且返回结果值时,会调用 resolve 函数;而当异步任务失败且返回失败原因(通常是一个错误对象)时,会调用reject 函数。...resolve() ,失败时调用 reject() setTimeout(() => { resolve('Success!')
instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。
# 思路 创建 XMLHttpRequest 实例 发出 HTTP 请求 服务器返回 XML 格式的字符串 JS 解析 XML 字符串 随着历史推进,XML 已经被淘汰,取而代之的是 JSON # 版本
# 思路 节流函数原理:规定在一个单位时间内,只能触发一次函数。如果这个单位时间内触发多次函数,只有一次生效 # 场景 拖拽 固定时间内只执行一次,防止超高频...
console.log("array flat"); // 1. 因为只有数组才有 concat 方法,所以这里必须写入初始值 空数组 只能打平一层 // ...
new Function('console.log("a simple script");')(); 这样做在安全性上和eval没有多大的差别,不过,他不能访问closure的变量,即通过this来调用...只是有点复杂先用with,在用Proxy with with这个特性,也算是一个比较鸡肋的,他和eval并列为js两大SB特性. 不说无用, bug还多,安全性就没谁了......> 这样,就可以保证js脚本的执行,但是禁止iframe里的javascript执行top.location = self.location。...设置基本的安全特性 <iframe sandbox='allow-scripts' id='sandboxed' src='frame.html'> // js
MDN 文档:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_...
# 思路 防抖函数原理:在事件被触发 n 秒后再执行回调,如果在这 n 秒内又被触发,则重新计时 防抖动是将多次执行变为最后一次执行,节流是将多次执行变成每隔一...
用Node.js写一个web服务器,我前面已经写过两篇文章了: 第一篇是不使用任何框架也能搭建一个web服务器,主要是熟悉Node.js原生API的使用:使用Node.js原生API写一个web服务器...第二篇文章是看了Express的基本用法,更主要的是看了下他的源码:手写Express.js源码 Express的源码还是比较复杂的,自带了路由处理和静态资源支持等等功能,功能比较全面。...从上面两个例子的代码来看,Koa跟Express有几个明显的区别: ctx替代了req和res 可以使用JS的新API了,比如async和await 手写源码 手写源码前我们看看用到了哪些API,这些就是我们手写的目标...本文的手写源码全部参照官方源码写成,文件名和函数名尽量保持一致,写到具体的方法时我也会贴上官方源码地址。...Express源码可以看我之前这篇文章:手写Express.js源码 Koa的思路看起来更清晰,Koa本身的库只是一个内核,只有中间件功能,来的请求会依次经过每一个中间件,然后再出来返回给请求者,这就是大家经常听说的
# 返回值 使用调用者提供的 this 值和参数调用该函数的返回值。若该方法没有返回值,则返回 undefined。 # 描述 call() 允许为不同的对象分配和调用属于一个对象的函数/方法。...返回值 调用有指定 this 值和参数的函数的结果。 # 描述 在调用一个存在的函数时,可以为其指定一个 this 对象。 this 指当前对象,也就是正在调用这个函数的对象。...它可以被用作被调用对象的所有未指定的参数。 这样,在使用 apply 函数的时候就不需要知道被调用对象的所有参数。可以使用 arguments 来把所有的参数传递给被调用对象。...被调用对象接下来就负责处理这些参数。...[[BoundArguments]] - 列表,在对包装函数做任何调用都会优先用列表元素填充参数列表。 [[Call]] - 执行与此对象关联的代码。通过函数调用表达式调用。
val; } } else { // 处理没有 value 的参数 paramsObj[param] = true; } }) return paramsObj;}手写...bind 函数bind 函数的实现步骤:判断调用对象是否为函数,即使我们是定义在函数的原型上的,但是可能出现使用 call 等方式调用的情况。...call 函数call 函数的实现步骤:判断调用对象是否为函数,即使我们是定义在函数的原型上的,但是可能出现使用 call 等方式调用的情况。...// 手写简化版// 节流函数const throttle = (fn, delay = 500) => { let flag = true; return (...args) => { if...是此次传进来的数值5,m值还是上一步中的7,所以add(m+n)=add(7+5)=add(12),此时m=12,并且返回temp函数由于后面没有传入参数,等于返回的temp函数不被执行而是打印,了解JS
本文照例会从Express的基本使用入手,然后自己手写一个Express来替代他,也就是源码解析。...手写源码 手写源码才是本文的重点,前面的不过是铺垫,本文手写的目标就是自己写一个express来替换前面用到的express api,其实就是源码解析。...app.use,这是中间件的调用入口,所有中间件都要通过这个方法来调用。...本文所有手写代码全部参照官方源码写成,方法名和变量名尽量与官方保持一致,大家可以对照着看,写到具体的方法时我也会贴出官方源码的地址。...按照这个思路,代码就简单了: // application.js // app.use就是调用router.use app.use = function use(fn) { var path =
JavaScript进阶的必要性 无论是学习react还是vue,它们都是js的应用框架。...剥去他们的壳子看到的始终是js,所以作为一个前端大厨必须要熟练掌握好js这个大勺,才能烧出一顿好菜 无论是自我提升还是应付面试以下这些手写功能是每一个前端程序员必须掌握的 1....手写apply、call、bind 每个Function对象都存在apply()、call()、bind() 方法,其作用都是可以在特定的作用域 中调用函数,等于设置函数体内this对象的值,以扩充函数赖以运行的作用域...根据this是谁调用就指向谁的原理,将this指向的函数 赋值给base对象的一个属性 base.fn=this // 3.执行函数,调用base.fn时,fn中的函数指向 base对象 let...根据this是谁调用就指向谁的原理,将this指向的函数 赋值给base对象的一个属性 base.fn=this // 3.执行函数,调用base.fn时,fn中的函数指向 base对象 let
盘点那些 JS 手写题 1. JS 基础 1....返回值:使用调用者提供的 this 值和参数调用该函数的返回值。若该方法没有返回值,则返回 undefined。...手写 bind 函数 「语法」 function.bind(thisArg[, arg1[, arg2[, ...]]]) thisArg:调用绑定函数时作为 this 参数传递给目标函数的值。...手写数组的 push 方法 「语法」 arr.push(element1, ..., elementN) elementN:被添加到数组末尾的元素 返回值:当调用该方法时,新的 length 属性值将被返回...是此次传进来的数值5,m值还是上一步中的7,所以add(m+n)=add(7+5)=add(12),此时m=12,并且返回temp函数 由于后面没有传入参数,等于返回的temp函数不被执行而是打印,了解JS
initial-scale=1.0" /> Document // 手写实现
我们来谈谈关于「JS手写」的相关知识点和具体的算法。 该系列的文章,大部分都是前面文章的知识点汇总,如果想具体了解相关内容,请移步相关系列,进行探讨。...文章list CSS重点概念精讲 JS_基础知识点精讲 网络通信_知识点精讲 好了,天不早了,干点正事哇。...new ES5、ES6继承 instanceof debounce & throttle reduce compose 合并对象 函数柯里化 深复制对象 Object.create 函数缓存 数组去重 手写...「Memoization」 主要在加快性能缓慢、成本高或耗时的函数调用方面很有用 记忆化可以加速后续的调用,所以当你预计在相同情况下多次调用同一个函数时,最好使用记忆化。...352" // "abc" Array.from与set去重 function unique(arr) { return Array.from(new Set(arr)) } ---- 手写
递归的概念 在程序中函数直接或间接调用自己 注意:使用递归函数一定要注意,处理不当就会进入死循环。递归函数只有在特定的情况下使用 ,比如阶乘问题。 3. 例子 1.
image.png 链式调用其实跟语言无关,例如下面形式的代码就属于链式调用: car.start().drive() 下面的代码跟上面的代码作用是相同的 只不过上面的看起来更加简洁: car.start...当不从方法返回一组值时,链式方法调用非常有用,否则显然需要将方法调用分配给变量,并且无法进行链接: const result = car.start() if (result) { car.drive...() } 希望本文,可以帮助大家理解链式调用。
# EventEmit export default class EventEmitter { constructor () { this.even...
领取专属 10元无门槛券
手把手带您无忧上云