javascript - 是否可以更改传递给函数的引用?
问题描述
我有一个全局对象,我试图将它的引用传递给一个函数,然后在调用的函数中更改引用指向的对象。这是一个简单的 3 元素数组的问题示例:
var myObject = [1, 2, 3]; //this is global
changeObject(myObject);
function changeObject(obj) {
$('#beforeLocal').html( obj.toString() );
$('#beforeGlobal').html( myObject.toString() );
obj = [4, 5, 6];
$('#afterLocal').html( obj.toString() );
$('#afterGlobal').html( myObject.toString() );
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>Local array before changing: <span id="beforeLocal"></span></p>
<p>Global array before changing: <span id="beforeGlobal"></span></p>
<p>Changing local array</p>
<p>Local array after changing: <span id="afterLocal"></span></p>
<p>Global array after changing: <span id="afterGlobal"></span></p>
但是,当更改本地对象时,它只会更改本地引用,而不是全局引用。我知道在这个例子中,
obj[0] = 4;
obj[1] = 5;
obj[2] = 6;
会工作。
我想在不循环遍历数组的所有值的情况下实现这一点,而且我希望它通常适用于不同大小和/或对象的数组。
我需要这样做,因为我需要一个通用函数,所以我不能直接在函数内部引用全局数组(因为它需要为多个数组工作),我也不能使用返回值,因为这是我需要异步执行(这是一个简化的问题)。
解决方案
推荐阅读
- google-chrome-extension - “散列”网络应用程序的正确方法是什么?
- r - 信息框错误(文本输出(“状态”)):找不到函数“信息框”
- java - Maven 在拥有主类的同时强制使用特定的 Java 版本
- c++ - 使用 std::cin.getline() 后如何保留 std::cin 的缓冲区
- python - “pygame.error:未设置视频模式”即使在 pygame.display.set_mode 已分配
- angular - 无法使用 websockets 传输类型与 SignalR 集线器连接
- javascript - javascript定时器改变颜色
- c# - 简单的 asp.net 标签助手列表<> 问题
- ruby-on-rails - Rails Engine 在视图中处理错误的控制器
- reactjs - 使用箭头键导航 Material-ui 列表