javascript - js函数里面的参数可以这样写?怎么理解呢?
怪我咯
怪我咯 2017-04-11 11:15:16
[JavaScript讨论组]
function createConnect({
  connectHOC = connectAdvanced,
  mapStateToPropsFactories = defaultMapStateToPropsFactories,
  mapDispatchToPropsFactories = defaultMapDispatchToPropsFactories,
  mergePropsFactories = defaultMergePropsFactories,
  selectorFactory = defaultSelectorFactory
} = {}){}
怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(4)
PHP中文网

这是es6里面的语法之一。
先了解以下对象的解构赋值。如下:

// 这个应该很好理解了
var { foo, bar } = { foo: "aaa", bar: "bbb" };
foo // "aaa"
bar // "bbb"

// 然后解构的时候可以指定默认值
var {x = 3} = {};
x // 3

var {x, y = 5} = {x: 1};
x // 1
y // 5

var {x:y = 3} = {};
y // 3

var {x:y = 3} = {x: 5};
y // 5

var { message: msg = 'Something went wrong' } = {};
msg // "Something went wrong"

运行到函数中:

// 参数是一组无次序的值
function f({x, y, z}) {
    console.log(x,y,z) // 3,2,1
}
f({z: 3, y: 2, x: 1});

所以这个函数等同于这样写:

// 这些值是给定的默认值
var connectAdvanced,defaultMapStateToPropsFactories,defaultMapDispatchToPropsFactories,defaultMergePropsFactories,defaultMergePropsFactories,defaultSelectorFactory
function createConnect(params = {}){
    var {
      connectHOC = connectAdvanced,
      mapStateToPropsFactories = defaultMapStateToPropsFactories,
      mapDispatchToPropsFactories = defaultMapDispatchToPropsFactories,
      mergePropsFactories = defaultMergePropsFactories,
      selectorFactory = defaultSelectorFactory
    } = params
    
}

ECMAScript 6 入门

天蓬老师

先看看这两个吧:
深入浅出ES6 深入浅出ES6

等号后面的是默认值,如果前面的是undefined,那么就用后面的值

let { a, b = 2 } = { a:1 };

console.log(a); // 1
console.log(b); // 2

回复评论:

当然不多余,如果={}省掉了,那么当什么都不传的时候,这个东西就会报错

你试试:

function test({a = 1}){console.log(a)}
test();

function test({a = 1}={}){console.log(a)}
test();

你之前贴的代码等同于这个代码:

function createConnect(obj) {
  if(obj === undefined) obj = {};
  var connectHOC = obj.connectHOC !== undefined ? obj.connectHOC : connectAdvanced,
      mapStateToPropsFactories = obj.mapStateToPropsFactories !== undefined ? obj.mapStateToPropsFactories : defaultMapStateToPropsFactories,
      mapDispatchToPropsFactories = obj.mapDispatchToPropsFactories !== undefined ? obj.mapDispatchToPropsFactories : defaultMapDispatchToPropsFactories;
  // ...mergePropsFactories, selectorFactory
}
PHP中文网

函数接受一个object类型的参数 这个参数默认为空对象
如果不为undefined 则 参数的所列属性都有默认值

PHPz
var obj={
  connectHOC = connectAdvanced,
  mapStateToPropsFactories = defaultMapStateToPropsFactories,
  mapDispatchToPropsFactories = defaultMapDispatchToPropsFactories,
  mergePropsFactories = defaultMergePropsFactories,
  selectorFactory = defaultSelectorFactory
}

function crateConnect(obj={}){
    console.log(obj);
}

这样写你看懂了吧!相当于给object一个默认值,并且把这个对象展开着写成参数了,打死这个写代码的!!!
这个默认值应该不会被执行,因为空对象也会被判断为true,应该不会赋默认值。这句不是很确定,等大神给看看

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号