执行可取消的延迟函数
1.题目描述
现给定一个函数 fn ,一个参数数组 args 和一个以毫秒为单位的超时时间 t ,返回一个取消函数 cancelFn 。
在经过 t 毫秒的延迟后,应该调用 fn 函数,并将 args 作为参数传递。除非 在 t 毫秒的延迟过程中,在 cancelT 毫秒时调用了 cancelFn。并且在这种情况下,fn 函数不应该被调用。
1.题目描述
请你编写一个函数,它接收一个函数数组 [f1, f2, f3,…, fn] ,并返回一个新的函数 fn ,它是函数数组的 复合函数 。
[f(x), g(x), h(x)] 的 复合函数 为 fn(x) = f(g(h(x))) 。
一个空函数列表的 复合函数 是 恒等函数 f(x) = x 。
你可以假设数组中的每个函数接受一个整型参数作为输入,并返回一个整型作为输出。
2.题解
传统方法:
1 | var compose = function (functions) { |
在 JavaScript 中,每个对象都有一个与之关联的原型(prototype)。原型是一个对象,它包含了共享的属性和方法,可以被其他对象继承。通过原型链,JavaScript 对象可以访问到其原型对象上的属性和方法。
当你创建一个对象时,JavaScript 会自动为这个对象关联一个原型。你可以将原型看作是一个对象的”父对象”,它定义了该对象共享的属性和方法。通过原型链,对象可以访问其原型对象的属性和方法。
每个 JavaScript 对象都有一个隐藏的属性
__proto__
,它指向了该对象的原型。在访问一个对象的属性或方法时,如果对象本身没有找到,JavaScript
引擎会沿着原型链去查找对象的原型,然后再去原型的原型,依此类推,直到找到所需的属性或方法或者到达原型链的末端。
例如:
1.题目描述:
请你写一个函数 createCounter. 这个函数接收一个初始的整数值 init 并返回一个包含三个函数的对象。
这三个函数是:
increment() 将当前值加 1 并返回。 decrement() 将当前值减 1 并返回。 reset() 将当前值设置为 init 并返回。
示例 1:
输入:init = 5, calls = [“increment”,“reset”,“decrement”] 输出:[6,5,4] 解释: const counter = createCounter(5); counter.increment(); // 6 counter.reset(); // 5 counter.decrement(); // 4 示例 2:
输入:init = 0, calls = [“increment”,“increment”,“decrement”,“reset”,“reset”] 输出:[1,2,1,0,0] 解释: const counter = createCounter(0); counter.increment(); // 1 counter.increment(); // 2 counter.decrement(); // 1 counter.reset(); // 0 counter.reset(); // 0