JavaScript注意点(补充ing)

1. 递归的返回值问题

1.1 递归

​ 我已知的有两种需求。

  • 递归到底,到达某一种情况,然后结束,返回这种情况下的某一个变量。

  • 每次递归结束都需要返回一个值,然后利用这个值进行其他操作。

    两种区别:

    • 第一种注重结果,只关注进行的当前递归即可。

    • 第二种关注整体,每一次递归都需要监控。

      所以说第二种更占用栈,即更容易发生栈溢出。

    然后说下我的经历。

    我踩这个坑是在练习扫雷时。需求功能如下:

    ​ 当点击一格,这一个不是雷时,就以这个格为中心然后向四周扩散,打开相邻的所有空格。实现如下:

    1. 首先点一格判断是否为雷,不是雷,则打开这格。
    2. 固定四种移动方向的顺序。
    3. 判断一种方向上移动是否越界、是否踩雷。
    4. 进入第一种方向上的递归。即重新开辟一个他本身这样的函数(1,2,3……)。
    5. 第二种方向的递归。
    6. 第三种方向的递归。
    7. 第四种方向的递归。
    8. 结束。

    ​ 就我的需求来看是需要第二种递归操作的。但是刚开始写,就没有注意这些。然后点完之后,老是直惯到底。

    ​ 我在函数内定义一个计数变量,每种方向递归位置并排的位置都将计数变量加一,但每次函数结束的输出都是 1 。

    ​ 最后才发现我的问题出在递归的产生上。

    如果函数名为 loopGo()

    上边两种情况,如果是第一种的话,

    可以直接

    loopGo(ep){
    	if(...)
    	{
           return loopGo(ep)
           }
           else{
               ...
           }
    }
    

    而第二种情况的话,就应该这么写。

    function loopGo(ep){
    	if(...)
    	{
           loopGo(ep)
           }
           else{
               ...
           }
    }
    
    1.2 问题产生

    ​ 产生区别的地方在于一个是return 产生递归,一个是调用函数产生递归。

    ​ 如果是return的话,会把return后的部分作为函数的结果,然后原函数第一层就没了。如果是调用的话就想运行其他代码。这层函数还是在的。所以我就懵逼了一天,找不到问题。

2. js 类比较

不能用== 或者===。

  • 使用JSON.stringfy() 将类转换为字符串进行比较。
  • 。。。待补充
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

112_13_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值