返回数组最后一个元素 and 计数器

273 阅读2分钟

题目一:返回数组最后一个元素

请你编写一段代码实现一个数组方法,使任何数组都可以调用 array.last() 方法,这个方法将返回数组最后一个元素。如果数组中没有元素,则返回 -1

思路:看到这个题目就知道很简单,直接用数组索引返回最后一个元素即可。

但是这个题目需要用this获取数组名称,因为这个方法是一个通用方法,要求任何数组都可以调用。

因为用了if语句,为简洁代码,还用了条件表达式。

基于上述思考,代码如下:

Array.prototype.last = function() {
    if(this.length === 0) return -1
    return this[this.length-1]
    /*return this.length === 0? -1 : this[this.length-1]*/
};

/**
 * const arr = [1, 2, 3];
 * arr.last(); // 3
 */

运行结果如下:

image-20230426151148872.png

题目二:计数器

请你编写并返回一个 计数器 函数,它接收一个整型参数 n 。这个 计数器 函数最初返回 n,每次调用它时返回前一个值加 1 的值 ( n , n + 1 , n + 2 ,等等)。

思路:说实话,刚看到这个题目的时候,根本没明白这题目想要讲啥。

后面看了评论区,才知道原来是还在考闭包。

闭包是能够访问其他函数内部变量的函数。

闭包的作用之一是实现缓存。

当前函数执行完毕后,变量不会被垃圾回收机制回收,可以被缓存继续使用。不过闭包容易引起内存泄露,在必要场景需要函数执行完毕清除变量,释放缓存,否则只能等到浏览器进程结束。

可是这个题不就是直接返回n++就好了嘛,emmm不知道是我没有懂题目考察的意思还是题目真的就是这么简单。

基于上述思考,代码如下:

/**
 * @param {number} n
 * @return {Function} counter
 */
var createCounter = function(n) {
    return function() {
        return n++
    };
};

/** 
 * const counter = createCounter(10)
 * counter() // 10
 * counter() // 11
 * counter() // 12
 */

执行结果如下:

image-20230426152105472.png

结论:可能是刚刚开始力扣的JavaScript模块的代码,今天写的代码都很简单(我暂时还只会写简单题)