题目一:返回数组最后一个元素
请你编写一段代码实现一个数组方法,使任何数组都可以调用 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
*/
运行结果如下:
题目二:计数器
请你编写并返回一个 计数器 函数,它接收一个整型参数 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
*/
执行结果如下:
结论:可能是刚刚开始力扣的JavaScript模块的代码,今天写的代码都很简单(我暂时还只会写简单题)