gpt4 book ai didi

javascript - 有人可以向我解释一下这一小段 JavaScript 代码吗?

转载 作者:行者123 更新时间:2023-11-28 16:05:51 25 4
gpt4 key购买 nike

基本上我希望 console.log 输出“yeah”,但事实并非如此。我该怎么做才能使其输出 yes,而不直接在 usefulFunction 内部引用它?

App = {
config: {
updateThis: 'false'
},
init: function(){
this.usefulFunction(this.config.updateThis);
this.consoleIt();
},
usefulFunction: function(item){
item = 'yeah';
// swap the above line for the line below and it works as expected
// this.config.updateThis = 'yeah';
},
consoleIt: function(){
console.log(this.config.updateThis);
}
}

App.init();

最佳答案

usefulFunction 中,您期望 C++ 风格的引用传递会影响对 config.updateThis 的原始引用,但是,当您调用时

 this.usefulFunction(this.config.updateThis);

您正在创建对“false”字符串的新引用(以传递给 usefulFunction),并且您无法更新 this.config 中的原始引用有用的函数

解决这个问题的唯一方法是传递要更新的对象的名称。同样,JS 中没有 C++ 引用传递。 Working example

App = {
config: {
updateThis: 'false'
},
init: function(){
this.usefulFunction(this.config, 'updateThis');
this.consoleIt();
},
usefulFunction: function(object, prop){
object[prop] = 'yeah';
},
consoleIt: function(){
console.log(this.config.updateThis);
}
}

问题不在于字符串是不可变的

ᚗ̸̢̛͝ 声称问题在于字符串是不可变的;然而,问题远不止于此。字符串是不可变的事实意味着您无法更改当前引用(因此所有其他引用都会更新),但即使它们是可变的,您也不能只设置单独的引用并影响现有引用

var a = {b:1};
function change(obj) {
// This is assigning {c:2} to obj but not to a
// obj and a both point to the same object, but
// the following statement would simple make obj point to a different object
// In other languages, you could define function(&obj) {}
// That would allow the following statement to do what you intended
obj = {c:2};
}

change(a);
console.log(a); // still {b:1}

关于javascript - 有人可以向我解释一下这一小段 JavaScript 代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14968021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com