JS中箭头函数中参数传递的问题

问题描述

下面的代码输出2,如何传递参数才能在**调用函数**的时候输出**函数创建时**的rid值: 1
求除了使用不同变量名之外的其它解决方案,谢谢~

相关代码

var rid = 1;
var f1 = (id = rid) => {
    console.log(rid);
}
rid = 2;

f1();   //输出2, 如何能让输出f1函数创建时候的rid值: 1

下面是原始代码

//获取任务列表
            var rid = this.getRid();
            action = {
                rid: rid,
                action : 'getTasks'
            }
            this.$store.state.ws.eventList[rid] = (d, id=rid) => {
                var data = d.data;
                if(data.length > 0){
                    for(var i in data){
                       this.$store.state.task.taskList.push(data[i]);
                    }
                }
                delete this.$store.state.ws.eventList[id];
            }
            this.$store.state.ws.websocket.send(JSON.stringify(action));

            //获取好友列表
            rid = this.getRid();
            action = {
                rid: rid,
                action : 'getFriends'
            }
            this.$store.state.ws.eventList[rid] = (d, id=rid) => {
                var data = d.data;
                if(data.length > 0){
                    for(var i in data){
                        data[i].nickname = data[i].nickname ? data[i].nickname : data[i].number;
                        data[i].initial = data[i].initial ? data[i].initial : data[i].number.toString().substr(0, 1);
                        data[i].headerUrl = data[i].type === 1 ? "http://p.qlogo.cn/gh/" + data[i].number + "/" + data[i].number + "/100/" : "http://q.qlogo.cn/headimg_dl?bs=qq&dst_uin=" + data[i].number + "&fid=blog&spec=100";
                        this.$store.state.allContacts.push(data[i]);
                    }
                }
                delete this.$store.state.ws.eventList[id];
            }
            this.$store.state.ws.websocket.send(JSON.stringify(action));
阅读 4k
3 个回答
var rid = 1;
var f1 = (id = rid) => {
  console.log(rid);
  rid = 2;
}

f1();
把rid的赋值放函数里面,既不耽误赋值,输出还是1,是这样吗?

解决方法不是很简单码,拷贝一份rid即可

var rid = 1;
var baseRid = rid;
var f1 = (id = baseRid) => {
  console.log(id, baseRid);
};
rid = 2;

f1();
let rid = 1;
const f = ((id = rid) => {
    let count = id;
    return () => { console.log(`${count}`); };
})();

rid = 2;
f();
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题