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

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>

你给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]); //这样就能取到