js语法问题

Mr_YZY
  • 4
新手上路,请多包涵
function fnCreate(mod, isOpen = true) {
    if (isOpen) {
        for (var key in mod) {
            ((res) => {
                if (res.isOpen !== false) {
                    Mock.mock(new RegExp(res.url), res.type, (opts) => {
                        opts['data'] = opts.body ? JSON.parse(opts.body) : null
                        delete opts.body
                        console.log('\n')
                        console.log('%cmock拦截, 请求: ', 'color:blue', opts)
                        console.log('%cmock拦截, 响应: ', 'color:blue', res.data)
                        return res.data
                    })
                }
            })(mod[key]() || {})
        }

   }
}

上面这段代码中箭头函数后面紧跟的(mod[key]() || {}),是个什么语法规则?

回复
阅读 654
4 个回答
✓ 已被采纳

函数后面加(),这是立即执行函数,()里的东西就是传的参数,参数是mod[key]() || {},意思就是传入mod[key]()运行的结果当做参数,如果结果不存在,传入空对象

((res) => {
})(res)

这个是定义了一个立即执行方法,(res)是方法入参

mod[key]() || {}
mod 是一个对象,对象里面有方法,根据key执行相应的方法,得到res参数。
|| 是短路逻辑
如果为空就执行后面的 {},所以 res参数就等于 {}。

ps:
在javascript的逻辑运算中,0、""、null、false、undefined、NaN都会判定为false,而其他都为true。
短路逻辑操作符有 && 和 ||;

表达式 && 表达式
前一个表达式为true 则执行后面一个表达式。

表达式 || 表达式
前一个表达式为false, 则执行后面一个表达式。

||逻辑或
const C = A || B 意味着:

  • 如果 Boolean(A) === true,则 C = A
  • 如果 Boolean(A) === false,则 C = B,无论 B 为何值。

(mod[key]() || {})这里是一个传参调用,而参数则是mod[key]() || {}计算的结果,这里用了或运算短路效果来保证传参格式符合要求,即,如果mod[key]()结果有效,则传递这个值,否则传递{}。即如果mod[key]没有定义,则会传递{}

你知道吗?

宣传栏