apply(对象,数组) ,call(对象,变量a,变量b)

apply()方法与call()方法都是在函数原型上的一个方法,调用这两个方法可以改变函数的this指向指向为参数中的对象,但是apply()方法经常被用来平铺一个数组中的数据,eg: Math.max.apply(null,arr) ,即可求出数组中的最大值,省去了for循环,遍历数组
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是十道和JavaScript中对象、函数、数组、运算符、变量、事件有关的高难度简答题及其答案: 1. 什么是闭包?闭包有哪些应用场景? 答:闭包是指有权访问另一个函数作用域中变量的函数。闭包常用于封装变量,延长变量的生命周期,从而实现函数间数据共享和保护。闭包还可以用来模拟私有变量和缓存数据。 2. 如何判断一个对象是否为数组? 答:可以使用 Array.isArray() 方法判断一个对象是否为数组。该方法返回一个布尔值,如果对象数组则返回 true,否则返回 false。 3. 如何实现一个继承自另一个对象对象? 答:可以使用 Object.create() 方法实现一个继承自另一个对象对象。该方法接收一个参数,即要继承的对象,返回一个新的对象,该对象的原型指向要继承的对象。 4. 如何实现一个简单的 Promise? 答:可以使用构造函数和原型链实现一个简单的 Promise。具体实现可参考下面的代码: ```javascript function Promise(fn) { var self = this; self.value = null; self.error = null; self.onFulfilled = null; self.onRejected = null; function resolve(value) { setTimeout(function() { self.value = value; self.onFulfilled(self.value); }, 0); } function reject(error) { setTimeout(function() { self.error = error; self.onRejected(self.error); }, 0); } fn(resolve, reject); } Promise.prototype.then = function(onFulfilled, onRejected) { var self = this; self.onFulfilled = onFulfilled; self.onRejected = onRejected; }; ``` 5. 如何实现一个函数柯里化? 答:函数柯里化是指将一个接受多个参数的函数转化为一系列只接受一个参数的函数,并返回一个新的函数,直到所有参数都被收集完成并执行原函数。函数柯里化可以用于延迟执行、参数复用、部分应用等场景。具体实现可参考下面的代码: ```javascript function curry(fn, args) { var length = fn.length; args = args || []; return function() { var newArgs = args.concat(Array.prototype.slice.call(arguments)); if (newArgs.length < length) { return curry.call(this, fn, newArgs); } else { return fn.apply(this, newArgs); } } } ``` 6. 如何实现一个函数节流? 答:函数节流是指在一段时间内只执行一次函数,以减少函数的执行次数。具体实现可参考下面的代码: ```javascript function throttle(fn, delay) { var timer = null; return function() { var self = this; var args = arguments; if (!timer) { timer = setTimeout(function() { fn.apply(self, args); timer = null; }, delay); } }; } ``` 7. 如何实现一个函数防抖? 答:函数防抖是指在一定时间内多次触发同一个函数,只执行最后一次,以减少函数的执行次数。具体实现可参考下面的代码: ```javascript function debounce(fn, delay) { var timer = null; return function() { var self = this; var args = arguments; if (timer) { clearTimeout(timer); } timer = setTimeout(function() { fn.apply(self, args); }, delay); }; } ``` 8. 如何实现一个数组去重? 答:可以使用 Set 数据结构实现一个数组去重。Set 是一种无序且唯一的数据集合,可以用来存储各种类型的值。具体实现可参考下面的代码: ```javascript function unique(arr) { return Array.from(new Set(arr)); } ``` 9. 如何实现一个数组扁平化? 答:可以使用递归和 reduce 方法实现一个数组扁平化。具体实现可参考下面的代码: ```javascript function flatten(arr) { return arr.reduce(function(prev, curr) { return prev.concat(Array.isArray(curr) ? flatten(curr) : curr); }, []); } ``` 10. 如何实现一个事件委托? 答:事件委托是指把事件处理函数绑定在父元素上,利用事件冒泡机制实现对子元素的事件响应。事件委托可以提高页面性能,减少事件绑定的数量。具体实现可参考下面的代码: ```javascript document.addEventListener('click', function(event) { if (event.target.matches('.item')) { // 处理子元素的点击事件 } }); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值