首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

对于bind、call、apply 区别?

一、作用 call、apply、bind作用是改变函数执行时上下文,简而言之就是改变函数运行时this指向 那么什么情况下需要改变this指向呢?...); } let obj = {     myname:"张三" } const bindFn = fn.bind(obj); // this 也会变成传入obj ,bind不是立即执行需要执行一次...:      ① 修改this指向      ② 动态传递参数 // 方式一:只在bind中传递函数参数 fn.bind(obj,1,2)() // 方式二:在bind中传递函数参数,也在返回函数中传递参数...fn.bind(obj,1)(2) ③ 兼容new关键字 整体实现代码如下: Function.prototype.myBind = function (context) {     // 判断调用对象是否为函数...== "function") {         throw new TypeError("Error");     }     // 获取参数     const args = [...arguments

26520

面试官:聊聊 this 指向问题

什么情况下会涉及 this 函数作用域情况下,才会有 this 绑定问题 或者 class 类 使用 call,apply, bind 严格模式 "use strict" 非严格模式 严格模式下...this 指向问题 普通函数,this 指向 undefined,不使用 call,bing,apply 改变其 this 指向情况下 console.log("window===>",this) /...fn===>", this.a)} } obj.fn() // "小仙女" // 此时 this 指向 obj // 变体 1 var fn = obj.fn fn() // Uncaught TypeError...this 指向问题跟作用域有关系,他会沿着作用域链一层层往外找,最先找到那个具有作用域,就将 this 绑定在那个作用域上,如果找不到,就直接绑定在全局作用域上 普通函数 this 指向,取决于在那个对象上执行...window var fn = obj.b.fn fn.call(obj) // "Ken" this 指向 window fn.apply(obj) // "Ken" this 指向 window fn.bind

27920

js 高阶函数之柯里化

当然也可以使用惰性函数来处理,本例最后一个方案会介绍 我们看下面的这个例子,在 DOM 中添加事件时需要兼容现代浏览器和 IE 浏览器(IE < 9),方法就是对浏览器环境进行判断,看浏览器是否支持,...fn.apply(this, args) // 满足要求,执行 fn 函数,传入新函数参数 : currying(fn.bind(this, ...args), length - args.length...并不是 函数 length 属性获取是形参个数,但是形参数量不包括剩余参数个数,而且仅包括第一个具有默认值之前参数个数,看下面的例子 ((a, b, c) => {}).length; //..., undefined] fn()(2)(3) // Uncaught TypeError: fn(...) is not a function 我们期望函数 fn 输出 1, 2, 3,但是实际上调用柯里化函数时...((a = 1, b, c) => {}).length === 0 所以调用 fn() 时就已经执行并输出了 1, undefined, undefined,而不是理想中返回闭包函数 所以后续调用

2.7K40

每天10个前端小知识 【Day 9】

实现bind步骤,我们可以分解成为三部分: 修改this指向 动态传递参数 // 方式一:只在bind中传递函数参数 fn.bind(obj,1,2)() // 方式二:在bind中传递函数参数,...也在返回函数中传递参数 fn.bind(obj,1)(2) 兼容new关键字 整体实现代码如下: Function.prototype.myBind = function (context) {...,并且更新部分网页 Ajax原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用JavaScript来操作DOM而更新页面 流程图如下 下面举个例子:...接受并处理服务端向客户端响应数据结果 将处理结果更新到 HTML 页面中 3....虽然JavaScript并不是真正面向对象语言,但它天生灵活性,使应用场景更加丰富。

8010

关于 JavaScript 错误处理最完整指南(上半部)

; } return string.toUpperCase(); } 这里我们检查函数参数是否为字符串。如果不是,我们抛出一个异常。...; throw null; 但是,最好避免这些事情:始终抛出正确错误对象,而不是一些基本类型。 这样有助于在代码中,错误处理一致性。...除了next()之外,从生成器返回迭代器对象还具有throw()方法。...浏览器中异步操作有:定时器相关函数事件和 Promise。 异步中错误处理不同于同步错误处理。我们来看一些例子。 大家都说简历没项目写,我就帮大家找了一个项目,还附赠【搭建教程】。...onerror 怎么样 HTML元素具有许多事件处理程序,例如onclick,onmouseenter,onchange等,当然还有 onerror。

1.6K30

可以但没必要?分享 20 个 JavaScript 库,打开视野👀

reducer 函数计算后得值,state 只读,不可修改; 这正是 FP 中 把原始不可变数据放入不同函数组合成管道进行计算 思想!...ApexCharts 图表具有更好交互~~ 适用 js 原生 + 3 大框架; 本瓜体验了一下,确实有不一样交互感受,很细节(●'◡'●); 11....Hammer.JS Hammer 是一个开源库,可以识别由触摸、鼠标和指针事件做出手势。它没有任何依赖关系,而且很小,只有 7.34 kB!...Discord.js discord.js 是一个强大 Node.js 模块,可让您轻松与 Discord API 交互; Discord 是一款专为社群设计免费网路即时通话软体与数位发行平台,拥有...Math.js 有了这个库,复杂数学问题就可以在前端浏览器上计算,而不会给后端服务器带来压力;它具有灵活表达式解析器,支持符号计算,内置大量函数和常量,并提供了一个集成解决方案来处理不同数据类型

2.3K20

函数柯里化

我们看下面的这个例子,在 DOM 中添加事件时需要兼容现代浏览器和 IE 浏览器(IE < 9),方法就是对浏览器环境进行判断,看浏览器是否支持,简化写法如下。...fn.apply(this, args) : currying(fn.bind(this, ...args), length - args.length) } } 扩展:函数参数...并不是函数 length 属性获取是形参个数,但是形参数量不包括剩余参数个数,而且仅包括第一个具有默认值之前参数个数,看下面的例子。...fn() 时就已经执行并输出了 [1, undefined, undefined],而不是理想中返回闭包函数,所以后续调用 fn()(2)(3) 将会报错。...,就开始执行函数 函数参数 length:获取是形参个数,但是形参数量不包括剩余参数个数,而且仅包括第一个具有默认值之前参数个数

90410

Python编程常见问题与解答

答:目前来看,Anaconda3和PyCharm用相对来说多一些。 3.问:在哪里执行pip命令安装Python扩展库?为什么在IDLE中执行会提示语法错误呢?...遇到这种情况时,仔细检查代码逻辑和问题要求是否一致,是否把>写成>=了,或者忽略了range()函数返回是左闭右开区间了,是不是把运算符**写成*了,是不是代码缩进有错误。...答:应该是文件具有“只读”之类特殊属性,或者当前登录用户账号没有权限访问该文件。 24.问:我机器上明明是有test.txt这个文件,为什么使用内置函数open()打开时提示文件不存在呢?...另外要注意,扩展库python-docx只能操作Word 2007或更新版本文档,不能处理Word 2003之前文档。...29.问:使用内置函数open()打开文件之后,只能按照顺序从前往后读取内容吗? 答:也不是,如果需要读取前面已经读取过内容,可以使用文件对象seek()方法修改文件指针位置。

3.4K10

前端基础进阶(十五):详解 Promise对象

不过,Node.js 有一个unhandledRejection事件,专门监听未捕获reject错误,上面的脚本会触发这个事件监听函数,可以在监听函数里面抛出错误。...另外,Promise.all()方法参数可以不是数组,但必须具有 Iterator 接口,且返回每个成员都是 Promise 实例。 p状态由p1、p2、p3决定,分成两种情况。...状态变成fulfilled后,它回调函数会接收到一个数组作为参数,该数组每个成员对应前面数组每个 Promise 对象。...参数不是具有then()方法对象,或根本就不是对象 如果参数是一个原始值,或者是一个不具有then()方法对象,则Promise.resolve()方法返回一个新 Promise 对象,状态为resolved...需要注意是,立即resolve() Promise 对象,是在本轮“事件循环”(event loop)结束时执行,而不是在下一轮“事件循环”开始时。

30320

前端基础进阶(十五):详解 Promise对象

不过,Node.js 有一个unhandledRejection事件,专门监听未捕获reject错误,上面的脚本会触发这个事件监听函数,可以在监听函数里面抛出错误。...另外,Promise.all()方法参数可以不是数组,但必须具有 Iterator 接口,且返回每个成员都是 Promise 实例。 p状态由p1、p2、p3决定,分成两种情况。...状态变成fulfilled后,它回调函数会接收到一个数组作为参数,该数组每个成员对应前面数组每个 Promise 对象。...参数不是具有then()方法对象,或根本就不是对象 如果参数是一个原始值,或者是一个不具有then()方法对象,则Promise.resolve()方法返回一个新 Promise 对象,状态为resolved...需要注意是,立即resolve() Promise 对象,是在本轮“事件循环”(event loop)结束时执行,而不是在下一轮“事件循环”开始时。

1.1K20

每天一道 python 面试题 - Python反射与自省

1.反射自省概念 自省:自省就是能够获得自身结构和方法,给开发者可以灵活调用,给定一个对象,返回该对象所有属性和函数列表,或给定对象和该对象函数或者属性名字,返回对象函数或者属性实例...反射就是通过字字符串形式来操作对象或者模块成员,一种基于字符串事件驱动 2.类与属性 类是对象定义,而实例是真正实物,它存放了类中所定义对象具体信息 类是现实世界抽象实体以编程形式出现...__dict__用于存储对象(可写)属性字典或其他映射对象,不是所有的对象都有__dict__属性。...,删除又重现 t.version 1.0 T.version = 3.0 #更新类属性 t.version #实例访问,其值已经改变 3.0 但是在类属性可以改变情况下,类属性可以通过实例改变...,这意味着方法时类属性而不是实例属性 任何方法定义第一个参数都是变量self,它表示调用此方法实例对象 非绑定方法:需要调用一个还没有任何实例类中一个方法 class Person(object

67310

开源图书《Python完全自学教程》第5.2.1节

在 Python 中,作为内置对象(也是对象类型)集合,同样具有这些特性,也能实现数学中集合运算。可以说,Python 中“集合”就是数学中“集合”在编程中实现。...,不是空集合,是一个空字典,如果要创建空集合,须使用注释(3)方式。...成员数量 6 并且,集合也是可迭代对象: >>> hasattr(s, "__iter__") True 于是乎,凡是要求以可迭代对象为参数函数,均可以用之于集合,例如: >>> sorted(...: unhashable type: 'list' 注意区分注释(4)和(1),在注释(4)中,试图得到一个成员分别是 [1 ,2]、3、4 集合,而不是 {1, 2, 3, 4} 。...: unhashable type: 'dict' 假设,集合中成员是列表,当对这个列表内成员进行增、删、改操作时,该列表本身没有变(内存地址不变),但其中成员变化了。

38630

可选链运算符(?.)

背景: 在 ES2020 之前,如果要访问 JavaScript 中对象嵌套属性,则必须在每个级别检查是否为 null 或 undefined,否则最终将会抛出 TypeError。...与函数调用一起使用时,如果给定函数不存在,则返回 undefined。 mdn 语法: obj.val?.prop obj.val?.[expr] obj.func?....undefined : temp.second); 可选链与函数调用 函数调用时如果被调用方法不存在,使用可选链可以使表达式自动返回undefined而不是抛出一个异常。...(); 注: 如果存在一个属性名且不是函数,使用 ?. 仍然会产生一个 TypeError 异常 (x.y is not a function). 处理可选回调函数或者事件处理器 使用?....[42]; 基本例子 如下例子在一个不含 bar 成员 Map 中查找 bar 成员 name 属性,因此结果是 undefined。

1K30

从零开始学 Web 之 ES6(四)ES6基础语法二

一、Promise Promise是一个对象,代表了未来某个将要发生事件(,这个事件通常是一个异步操作) 有了Promise对象, 可以将异步操作以同步流程表达出来, 避免了层层嵌套回调函数(俗称...指定 xhr 状态变化事件处理函数 request.onreadystatechange = function () { if (request.readyState...typeof运算符结果,表明变量s是 Symbol 数据类型,而不是字符串之类其他类型。 注意,Symbol函数前不能使用new命令,否则会报错。...这是因为生成 Symbol 是一个原始类型值,不是对象。也就是说,由于 Symbol 值不是对象,所以不能添加属性。基本上,它是一种类似于字符串数据类型。...该对象根本特征就是具有next方法。每次调用next方法,都会返回一个代表当前成员信息对象,具有value和done两个属性。

38710

前端面试题合集

,该方法接受一个由Promise对象组成数组作为参数(Promise.all()方法参数可以不是数组,但必须具有Iterator接口,且返回每个成员都是Promise实例),注意参数中只要有一个实例触发...需要注意是,立即resolve() Promise 对象,是在本轮“事件循环”(event loop)结束时执行,而不是在下一轮“事件循环”开始时。...因此最后返回不管是不是函数,也都不能说明没有产生闭包闭包表现形式返回一个函数在定时器、事件监听、Ajax 请求、Web Workers 或者任何异步中,只要使用了回调函数,实际上就是在使用闭包。...由于函数具有独立作用域特点,最原始写法是使用函数来作为模块,几个函数作为一个模块,但是这种方式容易造成全局变量污染,并且模块间没有联系。...后面提出了对象写法,通过将函数作为一个对象方法来实现,这样解决了直接使用函数作为模块一些缺点,但是这种办法会暴露所有的所有的模块成员,外部代码可以修改内部属性值。

74820
领券