一个关于 function(){}()的问题,大神们谁能帮我讲解下,谢谢 - V2EX
请不要在回答技术问题时复制粘贴 AI 生成的内容
WMutong

一个关于 function(){}()的问题,大神们谁能帮我讲解下,谢谢

  •  
  •   < href="/member/WMutong">WMutong Mar 9, 2018 4159 views
    This topic created in 2995 days ago, the information mentioned may be changed or developed.

    有一道题: 你是一个盗窃专家,某一天晚上你要去盗窃某一条街道的一排房子。这些房子都有相连的防盗系统,如果你把相邻的两家都偷了那么就会触发报警器。

    用一个数组来表示这些房子的金钱数量,请你完成 rob 函数,计算出在不触发报警器的情况下最多能偷多少钱。例如: rob([1, 2, 3]) // => 4

    答案: const rob = ((memo) => { const _rob = (nums)=>{

     let n = nums.length if(!n) return 0 if(!memo[n-1]){ console.log(nums.slice(0, -1), nums.slice(0, -2), nums[n - 1],nums); if(n===1) memo[0] = nums[0] else if(n===2) memo[1] = Math.max(nums[0],nums[1]) else memo[n-1] = Math.max(_rob(nums.slice(0,-1)), _rob(nums.slice(0,-2))+nums[n-1]) console.log(memo); } return memo[n-1] } return _rob 

    })([]);

    console.log(rob([1,3,7,3,2,9,10,1]));//20

    对于 function(){}()的用法,我貌似有些混乱了。对这个答案的逻辑不是很明白,有谁可以帮忙讲解下吗,谢谢

    20 replies    2018-03-09 20:07:06 +08:00
    xml123
        1
    xml123  
       Mar 9, 2018 via Android   1
    不懂这个语言,不过这道题我的思路是对 n 个元素,取第一个+后 n-2 个能取的最大值,与第二个+后 n-3 个能取的最大值,二者比较取大值,然后递归即可。不知道和你给的代码是不是一样的方法。
    nazor
        2
    nazor  
       Mar 9, 2018
    动态规划
    WMutong
        3
    WMutong  
    OP
       Mar 9, 2018
    @xml123 是的,思路是一样的。这个是我看到的别人的答案,用的 Javascript 中 ES6 的语法。我对其中的 function(){}()用法感觉不是很理解。
    VDimos
        4
    VDimos  
       Mar 9, 2018 via Android
    iife,立即执行函数
    hansnow
        5
    hansnow  
       Mar 9, 2018   1
    BearD01001
        6
    BearD01001  
       Mar 9, 2018 via iPhone
    这道题难道不是数组奇偶索引的和值比大小吗? P.S. 未细看 lz 给出的代码实现,不过感觉是解题人想多了,或是我理解有误?
    BearD01001
        7
    BearD01001  
       Mar 9, 2018 via iPhone
    @BearD01001 是我理解有误,抱歉。function () {} () 是立即执行函数,楼上有答主给出 ref。
    jhdxr
        8
    jhdxr  
       Mar 9, 2018
    @BearD01001 5,1,1,5
    qiutc
        9
    qiutc  
       Mar 9, 2018
    function(){}()
    相当于

    function foo () {}
    foo();

    就是定义了函数然后马上执行,这么做一般是为了控制作用域。
    zzNucker
        10
    zzNucker  
       Mar 9, 2018
    这个 rob 不是函数,是个函数的返回值。

    (function(){})()

    就是立即执行这个函数
    BearD01001
        11
    BearD01001  
       Mar 9, 2018 via iPhone   1
    @jhdxr 刚回复完突然想到了这种情况,确实是我考虑不周
    brickyang
        12
    brickyang  
       Mar 9, 2018
    这就是 Javascript 的立即执行函数( IIFE )。等效于:

    let a = function(arg) {};
    a([]);

    通常写成这样:

    (function(arg) {})([])

    第一个括号是函数声明。
    第二个括号是函数调用,括号里是调用时传的参数。

    https://en.wikipedia.org/wiki/Immediately-invoked_function_expression
    WMutong
        13
    WMutong  
    OP
       Mar 9, 2018
    @BearD01001 我刚开始也是这么认为的,但并不是。比如说:
    数组 [1 ,3 ,7 ,3 ,11 ,9 ,2 ,10 ]
    奇数相加 1+7+11+2= 21
    偶数相加 3+3+9+10=25

    奇偶最大值 25
    实际最大值 10+11+7+1=29
    WMutong
        14
    WMutong  
    OP
       Mar 9, 2018
    @hansnow 对的对的就是这个,谢谢
    WMutong
        15
    WMutong  
    OP
       Mar 9, 2018
    @BearD01001 也感谢你来参与了我的问题,谢谢
    walleL
        16
    walleL  
       Mar 9, 2018
    为什么要套一层 memo? 没看明白
    KuroNekoFan
        17
    KuroNekoFan  
       Mar 9, 2018 via iPhone
    你这 iife 的话函数定义外面少了一层括号吧
    sunjourney
        19
    sunjourney  
       Mar 9, 2018
    用动规可破
    vincenttone
        20
    vincenttone  
       Mar 9, 2018
    写了一版递归的( python 有点水)
    https://gist.github.com/vincenttone/f2e754e62614cad0db2b5c9fde7bf70d

    至于 funcion(){}()的问题:
    x = function(){}
    x()
    转为匿名函数应该就是 funciton(){}()了吧
    About     Help     Advertise     Blog     API     FAQ     Solana     1136 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 49ms UTC 17:59 PVG 01:59 LAX 10:59 JFK 13:59
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86