JS算法练习 11.11

leetcode 2619 数组原型对象的最后一个元素

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

你可以假设数组是 JSON.parse 的输出结果。

示例 1 :

输入:nums = [null, {}, 3]
输出:3
解释:调用 nums.last() 后返回最后一个元素: 3。

示例 2 :

输入:nums = []
输出:-1
解释:因为此数组没有元素,所以应该返回 -1。

太无脑了,下一个

Array.prototype.last = function() {
    n = this.length
    if(n == 0)return -1
    else return this[n-1]

};

 leetcode 2620 计数器

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

示例 1:

输入:
n = 10 
["call","call","call"]
输出:[10,11,12]
解释:
counter() = 10 // 第一次调用 counter(),返回 n。
counter() = 11 // 返回上次调用的值加 1。
counter() = 12 // 返回上次调用的值加 1。

示例 2:

输入:
n = -2
["call","call","call","call","call"]
输出:[-2,-1,0,1,2]
解释:counter() 最初返回 -2。然后在每个后续调用后增加 1。
var createCounter = function(n) {
    let count = n
    return function() {
        return count ++
    };
};

 虽然这道题无脑的要命,但我们还是回顾一下JS的闭包知识。

闭包的含义:如果一个函数访问了此函数的父级及父级以上的作用域变量,那么这个函数就是一个闭包。

来一个JS闭包小练习

判断一下下面代码的输出

var a = 10
function foo(){
    console.log(a)
}
 
function bar() {
    var a = 20
    foo()
}

bar()

答案:10

为什么不是20?

因为JavaScript中的作用域是词法作用域,即函数在定义时就确定了它的作用域,而不是在运行时。因此,foo()函数在定义时的上一级作用域是全局作用域,而不是在bar()函数中的局部作用域。在foo()函数中,并没有定义变量a,因此它会向上一级作用域即全局作用域查找。

 leetcode 2621 睡眠函数

请你编写一个异步函数,它接收一个正整数参数 millis ,并休眠 millis 毫秒。要求此函数可以解析任何值。

示例 1:

输入:millis = 100
输出:100
解释:
在 100ms 后此异步函数执行完时返回一个 Promise 对象
let t = Date.now();
sleep(100).then(() => {
  console.log(Date.now() - t); // 100
});

示例 2:

输入:millis = 200
输出:200
解释:在 200ms 后函数执行完时返回一个 Promise 对象
async function sleep(millis) {
    return new Promise((resolve) => {
        setTimeout(()=> {
            resolve()
        }, millis)
    })
}
复习一下Promise用法吧
function fetchData(i) {
    return new Promise((resolve, reject) => {
      // 模拟异步操作
      setTimeout(() => {
        const data = 'Hello, world!';
        // 模拟异步操作成功
        if(i==1)resolve(data);
        // 模拟异步操作失败
        if(i==2)reject(new Error('Failed to fetch data.'));
      }, 200);
    });
  }
  
  fetchData(1)
    .then((data) => {
      console.log(data); // 异步操作成功时执行
    })
    .catch((error) => {
      console.error(error); // 异步操作失败时执行
    })
    .finally(() => {
      console.log('Promise has been resolved or rejected.'); // 无论成功失败都会执行
    });

你可能感兴趣的:(JS算法题,前端,javascript)