首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

前端面试题锦集:第一期

但是const 保存当前变量的引用。意味着const声明一个Object类型的变量,依然可以修改该变量的属性 new 操作符执行的过程 使用new操作符会执行以下过程: 在内存中创建一个新对象。...Function.prototype.call Function.prototype.apply 调用。...跟普通的函数调用相比,用 Function.prototype.call Function.prototype.apply 可以动态地改变传入函数的 this。...call 和 apply其实是Function的原型上的两个方法。也就是Function.prototype.call Function.prototype.apply。...浅复制 和 深复制 浅复制只复制对象的引用地址,并不复制对象本身,新旧对象共用一个块儿内存。深拷贝会创建一个一模一样的对象,且新旧对象并不共享内存,修改新对象不会修改元对象。

27130

划重点:js中的this、call、apply

js中this有4种指向,分别为: 作为对象的方法调用 作为普通函数调用 构造器调用 Function.prototype.callFunction.prototype.apply调用 1、当作为对象的方法调用时...4、Function.prototype.callFunction.prototype.apply调用this 通过callapply,可以动态改变传入函数的this 1var obj1 = {...(obj2)) //sxm 对于call和apply的理解 要想理解上文第4点中的call调用改变this的具体实现原理,需要先了解call和apply的作用。...Function.prototype.callFunction.prototype.apply,它们的作用是完全一样的,都是改变函数的this指向。区别在于两者传入参数的不同。...; 当在Function.prototype.callFunction.prototype.apply情况下,前面调用applycall的函数体内的this原有指向被更改为指向applycall方法中的第一个参数

95420
您找到你想要的搜索结果了吗?
是的
没有找到

JavaScript中的 this的理解

callback被作为普通函数调用时 , callback内部的this指向了window ,但我们往往是想让它指向该div节点 , 见如下代码 : 此时有一种简单的解决方案 , 可以用一个变量保存div节点的引用...Function.prototype.call Function.prototype.apply 调用 跟普通的函数调用 , 用 Function.prototype.call Function.prototype.apply...可以动态地改变传入函数的this; call 和 apply 方法能很好地体现JavaScript 的函数式语方特性 , 在JavaScript 中 , 几乎每一次编写函数式语言的风格 , 都离不开call...这是因为许多引擎的 document.getElementById方法的内部实中需要用到this。...但当用 getId 来引用 document.getElementId 之后 , 再调用getId , 此时就成了普通函数调用 , 函数内部的 this 指向了window , 而不是原来的 document

44810

关于JS中this指向问题的探究

js中的this this js中的this总是指向一个对象,也就是一个obj,但是具体指向的是哪一个obj是根据具体的运行时函数的执行环境动态绑定的,而不是函数被声明的环境!...或者 Function.prototype.apply调用 下面我们一个一个说 作为对象的方法调用 var obj = { a : 1, getA:function...也就是说他可以返回,如果不是一个对象的话,那么this的指向还是不会变 Function.prototype.call 或者 Function.prototype.apply调用 var obj =...内部实现是用到this指向的,原本这个this是指向document的,当document.getElementById这个方法被调用的时候this指向也确实是改document 但是当我们使用getId来引用这个...中很多别的不好理解的概念差不多,用的多了就明白了为什么那么写,很多的时候我们看到一个错,就知道需要使用let that = this类似这样的代码块解决,究其原因是他很理解错误的原因吗?

1.4K31

看完这几道 JavaScript 面试题,让你与考官对答如流(中)

Function.prototype.apply方法的用途是什么? 28. Function.prototype.call方法的用途是什么? 29....Function.prototype.apply 和 Function.prototype.call 之间有什么区别? 30. Function.prototype.bind的用途是什么? 31....Function.prototype.apply 和 Function.prototype.call 之间有什么区别?...apply()方法可以在使用一个指定的 this 值和一个参数数组(类数组对象)的前提下调用某个函数方法。call()方法类似于apply(),不同之处仅仅是call()接受的参数是参数列表。...在箭头函数版本中,我们只需要()括号,不需要 return 语句,因为如果我们只有一个表达式需要返回,箭头函数就会有一个隐式的返回。

2K10

JScall apply bind 方法

jscall apply bind 方法都很常见,目的都是为了改变某个方法的执行环境(context) call call([thisObj[,arg1[, arg2[,   [,.argN]]]]]...如果没设置严格模式 “use strict”  当thisObj 不存在 为 undefined 或为 null 或为 this 时,则隐式地指向 全局对象(在浏览器中即为 window) 第二个参数是一个个值...apply apply([thisObj[,arg1, arg2, argN]]) apply和call类似,区别只是第二个参数,是一个数组(类数组)的形式 bind bind(thisArg [,...注1:但IE9(包括IE9)以上的才支持bind 所以,在不支持bind的浏览器上,我们需要模拟一下 Function.prototype.Bind = function(context){ var..._apply; } }; Function.prototype.Apply = function(context,args){ context = (context == undefined

1.5K30

JavaScript 核心原理剖析

7 种基础类型, 1 种引用类型。请注意以下两点:基础类型存储在栈内存。被引用拷贝时,会创建一个完全相等的变量;引用类型存储在堆内存。存储的是地址,多个引用指向同一个地址。...bind 和 call、apply的区别就在于一个要返回函数,另外两个需要返回eval的执行结果。js 闭包我接触过很多面试求职者, 没500也有800了吧。...闭包产生的本质当前环境中存在指向父级作用域的引用要产生闭包只需要 在当前环境中使其存在指向父级作用域的引用至于你用什么手段来保证 2 成立,那是你的本事。...先看以下 todo list:需要一个js执行器一行行的去解释你的代码读到一个作用域就丢进一个 先进后出的 堆栈结构( call stack ,调用堆栈)好的,当调用堆栈遇到了需要异步处理的某个作用域函数...call stack 每次执行任务都会释放掉不存在引用的变量。

37410

js基础之数据类型和拷贝

var a = 10; var b = a; b = 20; console.log(a); // 10 console.log(b); // 20 下图是基本类型的一个直观过程 js中的引用类型...引用类型是存放在堆内存中的对象,变量其实是保存的在栈内存中的一个指针(保存的是堆内存中的引用地址),这个指针指向堆内存。引用类型数据在栈内存中保存的实际上是对象在堆内存中的引用地址。...1.2 判断数据类型 1.2.1 typeof 使用方法:typeof operand 或者 typeof(operand) operand:一个表示对象原始值的表达式,其类型将被返回。...为了每个对象都能通过 Object.prototype.toString() 来检测,我们需要用 Function.prototype.call() 或者 Function.prototype.apply...既然属性值类型是数组和象时只会传址,那么我们就用递归来解决这个问题,把父对象中所有属于对象的属性类型都遍历赋给子对象即可。

31130

【建议】记录一次BAT一线互联网公司前端JavaScript面试

能判断哪些类型 typeof运算符: 可以识别所有值的类型 可以识别函数 可以用力判断是否为引用类型 考点:JS变量类型 代码: // 判断所有值的类型 let a; typeof a // 'undefined...typeof null // 'object' typeof ['a','b'] // 'object' typeof {x:10} // 'object' 什么时候使用===,什么时候使用== 考点...什么时候使用===,什么时候使用== 除了==null外,其他地方用=== const obj = {a:1} if(obj.b==null){} // 相当于 //if(obj.b === null...throttle,防抖 debounce 考点:性能,体验优化 Promise解决了什么问题 考点:JS异步 值类型和引用类型的区别 值类型的表示: // 值类型 let a = 10 let b =...__proto__ == Function.prototype // true Function.prototype.apply/call/bind 异步,单线程 同步和异步的区别是什么?

1.6K20

为什么 call 的速度快于 apply

于是使用 benchmark.js 在 node 中自己测试了一下: const Benchmark = require('benchmark') const suite = new Benchmark.Suite...x 969,699 ops/sec ±0.52% (91 runs sampled) Fastest is call 可见虽然 call 比 apply 要快一些,但是差别并不是很大,那么在浏览器上面表现如何呢...为什么 call 要快于 apply SO 上面解释的比较详细,在语言设计的时候,apply 需要执行的步数就比 call 要多:无论 call 还是 apply,最终都是调用一个叫做 [[Call]]...的内部函数,而 apply 相对于 call 多做了一些参数处理,如参数判断、格式化等。...对比 ES5 和 ES6 中对这两个函数的定义,发现 Function.prototype.call 的变化并不大,主要变化发生在 Function.prototype.apply 上,从 ES5 的

33110

面试官问:能否模拟实现JScall和apply方法

1.面试官问:能否模拟实现JS的new操作符 2.面试官问:能否模拟实现JS的bind方法 3.面试官问:能否模拟实现JScall和apply方法 4.面试官问:JS的this指向 5.面试官问:JS...的继承 之前写过两篇《面试官问:能否模拟实现JS的new操作符》和《面试官问:能否模拟实现JS的bind方法》 其中模拟bind方法时是使用的call和apply修改this指向。...但面试官可能问:能否不用call和apply来实现呢。意思也就是需要模拟实现call和apply的了。...如果该参数的值为 null undefined,则表示不需要传入任何参数。从ECMAScript 5 开始可以使用类数组对象。 返回值 调用有指定this值和参数的函数的结果。...也就是说完全可以不使用call,而使用apply代替。 也就是说,我们只需要模拟实现apply,call可以根据参数个数都放在一个数组中,给到apply即可。

79230

JavaScript 判断数据类型方法

在 ECMAScript 规范中,共定义了 7 种数据类型,分为 基本类型 和 引用类型 两大类,如下所示: 基本类型:String、Number、Boolean、Symbol、Undefined、Null...引用类型:Object(Function 、Array、RegExp、Date...) typeof typeof 操作符返回一个字符串,表示未经计算的操作数的类型。...property 'constructor' of null 复制代码 函数的 constructor 是不稳定的,这个主要体现在自定义对象上,当开发者重写 prototype 后,原有的 constructor 引用会丢失...为了每个对象都能通过 Object.prototype.toString() 来检测,需要以 Function.prototype.call() 或者 Function.prototype.apply(...Object.prototype.toString.call(1) // "[object Number]" Object.prototype.toString.call('1') // "[object

25900

模拟实现 call 和 apply

列出 MDN 的地址: Function.prototype.apply() Function.prototype.call() 示例 function b(a, b) { console.log...,所以需要的话,可以调用 Object.prototype.toString 原有逻辑 Object.prototype.toString.call([]); // [object Array] []....this 这两点是关键,展开讲的话,也就是我们要自己实现这些工作: 接收不定长的参数列表,第一个参数 thisArg 表示函数内 this 指向 当 thisArg 值为 null undefined...将该函数挂载到指定的上下文 this 对象上 let fn = Symbol(); // Symbol 可以避免属性冲突被外部修改 context[fn] = this; // this...Function.prototype.apply(thisArg, [argsArray]) apply 跟 call 本质上是一样的,区别仅在于对参数的接收形式不同,直接看模拟实现的代码: Function.prototype.apply2

39220
领券