Goodluck_Gougou 2021-06-16 10:55 采纳率: 66.7%
浏览 55
已采纳

JS,感觉好神奇的问题..求解啊

 最近在学习JS.. 网上看了一个网站代码不着调啥意思.就趴下来本地看看学习..

但是不明白这段代码是如果运行的..

而且最开始需要先打印a .后面打印 b实参才有数据..否则打印的b为 undefined...奇怪的逻辑

这段代码在原来的地方是可以运行的..我这边只是将 a 变量缩短了.太长了. 但是不明白这里 b['push'] 和 b['shift']  ...

实参b应该是和 var a一样的啊..数组这样怎么取值没搞明白...对象才是这样取值的哇.

难道 JS 还有什么隐藏功能么?

<script>
    var a = ['oeidD', 'bRnDx', 'prototype',  ''+'eB', 'push', 'shift'] // 有很长很长..300+个值

    // console.log(a);  // 注释掉后


    (function (b, c) {
        console.log(b);  //  上面注释掉后 打印的是 undefined..取消注释则正常打印
        var d = function (e) {
            console.log(e)
            while (--e) {
                b['push'](b['shift']()); // 这是什么用法?  这段理解不了.但是网站上可以运行,进死循环..  b 是一个数组的哇.
                console.log(e)
            }
        };

        d(++c);

    }(a, 6)); 
</script>
  • 写回答

1条回答 默认 最新

  • 崽崽的谷雨 2021-06-16 11:30
    关注

    你给var a加个结束加个分号就行了。这样就能正常运行了不管注不注释都行。原因的话应该就是没加分号当成一个整体了https://blog.csdn.net/weixin_45376220/article/details/97693306 这个说法我觉得是对的。至于b['push']这个会解析成push函数所以b['push'](b['shift']())就会删除最后一个。

     var a = ['oeidD', 'bRnDx', 'prototype',  ''+'eB', 'push', 'shift']; // 有很长很长..300+个值

    a['']是一个对象取用技巧,比如你对象的key值是一个变量,这时候就得用这个了例如

           let obj={
                a:'bbb'
            }
            console.log(obj.a,obj['a']); //这两种都能取到值 
            //有的时候key值是一个变量
            let key='a';
            console.log(obj.key);//就是undefined
            console.log(obj[key]); //这样就能取到
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c