收藏
回答

请问 js 函数中这么 ({}[])() 调用方法是什么意思?

框架类型 问题类型 终端类型 微信版本 基础库版本
小程序 需求 客户端 7.0.0 1.5.0


goods: function(code,id, success, fail){

    ({

      normal: function(code,id, success, fail){

        wx.request({

          url: app.globalData.interface_url

          data: {

            code:code,

          id    :id

          },

          header: {

            'content-type': 'application/json'

          },

          success: function (res) {

            success(res);

          },

          fail: function(e){

            console.log(e);

            fail(e);

          }

        })

      },

      test: function(code, id, success, fail){

        success({

          data: {

            result: 0,

            content: {

             

              address: '海淀东路云海路交叉口东100',

             

            }

          }

        });


      }

    }[app.mode || 'normal'])(code, id, success, fail);



请问函数的这样调用方式是什么意思呢?

回答关注问题邀请回答
收藏

4 个回答

  • 哄哄
    哄哄
    2019-01-09

    写这样的代码,是怕后面同事工作太轻松。

    //如何执行一个方法


    // 第一步:定义
    function foo(){
      // dosomething...

    }

    // 第二步:执行

    foo();


    // 等价于

    (function foo(){

     // dosomething...

    })();


    问题里的代码这样拆分

    const goods = (function (){ 
     
     { a:'a', b:'b'}['a'] ;
     
    })();


    1. 要给 goods 赋值,先执行右边,发现左边是 (function(){})() 那么就执行里面的 function;

    2. function 里面是 { a:'a', b:'b'}['a']  ,那么就找到 Key 名为 a 的属性。


    2019-01-09
    有用 1
    回复 2
    • 黎😄
      黎😄
      2019-01-09

      他那个同事应该是想做个控制测试数据还是真实数据,只是设计太烂了。

      2019-01-09
      回复
    • 2019-01-09

      这么写,感觉技巧是高了,但是可读性差了啊,当然了我水平也不咋地

       

       


      2019-01-09
      回复
  • 黎😄
    黎😄
    2019-01-09

    写得这么鬼复杂干个锤子。

    function函数({对象}[对象的下标])(立刻执行函数)

    就是good函数里面的是调用的是根据app.mode || 'normal来判断调用normal,或者test函数,然后外面那个()是js的立刻执行函数的意思,code, id, success, fail就是函数执行要传递的参数。

    立刻执行函数就是

    (function(str){


        console.log(str);


    })('立刻打印');

    函数会立刻执行,不用定义了再执行。



    2019-01-09
    有用 1
    回复 4
    • 2019-01-09

      🤦‍♀️   请教大佬,不知道控制测试数据和真实数据 的设计有没有比这个更简洁方便的? 写两个函数是不是都比这个强(ノへ ̄、)捂脸

      2019-01-09
      回复
    • 黎😄
      黎😄
      2019-01-09回复

      emmm~~~我是把测试数据单独成文件,开启测试模式的时候从测试文件中读,,,上传之前把测试数据文件删掉就好了。感觉你这样要删测试数据的话要每个函数找喔,很烦喔。

      2019-01-09
      回复
    • 2019-01-09

      确实有点烦哎,我又不是大神那种一统江湖的气概,只能边学边改了,不过测试文件应该不用删吧,上传的时候模式改下是不是也OK

      2019-01-09
      回复
    • 黎😄
      黎😄
      2019-01-09回复

      ok,只是我会嫌他占大小。

      2019-01-09
      1
      回复
  • 香车
    香车
    2019-01-10

    哈哈哈.png,IIFE了解一下。

    2019-01-10
    有用
    回复 1
    • 2019-01-11

      要得要得

      2019-01-11
      回复
  • XJMU
    XJMU
    2019-01-09

    笑哭.png

    2019-01-09
    有用
    回复 1
    • 2019-01-09

      尴尬.png

      2019-01-09
      回复
登录 后发表内容