javaScript蓝桥杯----乾坤大挪移心法


一、介绍

六大派围攻光明顶,为解除明教危机,张无忌临危受命,在小昭的帮助下进入明教圣地拿到乾坤大挪移心法。在这关键时刻,心法因没有妥善保存长久暴露在空气中,部分字体已不可见,下面需要由你来设计心法帮助张无忌习得神功,战胜六大门派。

二、目标

找到 main.js 文件中的“乾坤大挪移心法” mentalMethod 函数,完成函数中的 TODO 部分。

  1. mentalMethod 需要返回一个函数,可以一直进行调用,但是最后一次调用不传参。
  2. 函数通过以下方式执行,返回结果均为 ‘战胜峨眉,武当,少林’。
mentalMethod('峨眉')('武当')('少林')();
mentalMethod('峨眉','武当')('少林')();
mentalMethod('峨眉','武当','少林')();

注意逗号为英文逗号。

完成后,在命令行输入 node main.js 效果如下:
在这里插入图片描述

三、代码

js

function mentalMethod(...args) {
    
    
    // TODO 待补充代码 

}
console.log(mentalMethod('峨眉')('武当')('少林')());
console.log(mentalMethod('峨眉', '武当')('少林')());
console.log(mentalMethod('峨眉', '武当', '少林')());

// 以下代码为测试使用,请勿删除
module.exports = {
    
    
    mentalMethod
}

一开始想这道题思考了很多 闭包 立即执行函数 等等 要注意的是返回函数而不立即执行

四、答案

法一: 我觉得这种解法的缺点就是要使用外部数组

//内部函数能够访问外部变量
let arr = []
function mentalMethod(...args){
    
    
  //创建一个数组的深拷贝,让你可以安全地对该数组进行修改而不会影响到原始数组。
  const newArr = JSON.parse(JSON.stringify([...args]))
  //将数组中的元素赋值给外部数组
  for(let i of newArr){
    
    
    arr.push(i)
  }
  //如果数组长度大于1,说明还在调用该函数就返回函数本身
  if(newArr!=0){
    
    
    return mentalMethod
  }else{
    
    
    //否则返回字符串
    let str = '战胜' + arr.join(',')
    //由于它是连续调用的,所以每次调用完后都要清空数组
    arr = []
    return str
  }

}
console.log(mentalMethod('峨眉')('武当')('少林')());
console.log(mentalMethod('峨眉', '武当')('少林')());
console.log(mentalMethod('峨眉', '武当', '少林')());

法二: 这种解法就是为了得到正确答案不择手段的做法

function mentalMethod(...args) {
    
    
    // TODO 待补充代码
    if(args.length){
    
    
        return mentalMethod
    }else{
    
    
        return '战胜峨眉,武当,少林'
    }
}

法三:利用闭包解决外部数组

function mentalMethod(...args) {
    
    
  // TODO 待补充代码
  let str = ''
  str += args.join(',')
  //闭包做法
  let newFn = function (...args) {
    
    
    //如果arsg.length>0,说明还有参数,继续递归调用
    if (args.length > 0) {
    
    
      str += ',' + args.join(',')
      return newFn
    } else {
    
    
      //如果没东西了,就返回结果
      return '战胜' + str
    }
  }
  //上面这个函数走出来说明函数调用结束了 且str已经赋值完成
  return newFn
}

console.log(mentalMethod('峨眉')('武当')('少林')());
console.log(mentalMethod('峨眉', '武当')('少林')());
console.log(mentalMethod('峨眉', '武当', '少林')());

猜你喜欢

转载自blog.csdn.net/m0_58065010/article/details/129918689
今日推荐