功能风格的JavaScript:避免参数变异的好习惯?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了功能风格的JavaScript:避免参数变异的好习惯?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1022字,纯文字阅读大概需要2分钟。
内容图文
这是一个相当普遍的问题.功能样式编程促进了程序关于通过函数转换数据的想法,并且应该避免突变(除了可能在函数内,被视为抽象的基本单元).
但在这个计划中:
function foo (bar) {
bar.k1 = "bananas";
return bar;
}
var o = { k1: "apples", k2: "oranges"};
var p = foo(o);
外部变量o在foo中发生变异,因为bar是对o的引用,最后,o === p(它们引用同一个对象).但功能范式宁愿将p视为新数据.
显而易见的解决方案是克隆参数(例如使用下划线/ lodash的_.clone):
function foo (_bar) {
var bar = _.clone(_bar);
bar.k1 = "bananas";
return bar;
}
但我想知道这是否是思考这个问题的正确方法.在FP视角中,如果它们将被突变,你会认为克隆作为参数传递的对象是一个好习惯吗? (我知道并非所有对象都可以轻松克隆,如果有的话,但让我们坚持简单的情况).你的意见?
解决方法:
理想情况下,函数应在每次调用时返回一个全新的对象.显然出于性能原因它并不好,这就是persistent data structures存在的原因. JS有一些库; immutable-js可以说是最受欢迎的.
否则改变对象很好,在JS中这是常见的做法,因为不是每个项目都会立即受益于持久数据结构,加上库的权重.
另请注意,在JavaScript中,所有内容都按值传递,但值本身可以包含引用.
内容总结
以上是互联网集市为您收集整理的功能风格的JavaScript:避免参数变异的好习惯?全部内容,希望文章能够帮你解决功能风格的JavaScript:避免参数变异的好习惯?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。