Js dom下标引用问题

Js 变量引用问题

相关代码

<!DOCTYPE html>
<html lang="en">

<head>

<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>

</head>

<body>

<p>Js 下标引用问题</p>
<div>初始值: index = 0</div>
<button id="a1">增加</button>
<button id="a2">减少</button>
<div>结果:
    <span id="result"></span>
</div>
<script>
    var index = 0;
    var arr = [1, 2, 3, 4, 5, 6];
    function setIndex(idx, arry, state) {
        if (state) {
            idx++;
        } else {
            idx--;
        }
        document.getElementById('result').innerHTML = idx + ':' + arr[idx];
    }
    document.getElementById('a1').addEventListener('click', function () {
        setIndex(index, arr, 1)
    }, false)
    document.getElementById('a2').addEventListener('click', function () {
        setIndex(index, arr, 0)
    }, false);
</script>

</body>

</html>

很奇怪js addEventListener 方法引用全局的index 在点击事件中index每次为啥未增加?还请知道的大牛解惑.

阅读 2.3k
2 个回答

把JS基础再看看,值类型与引用类型
index为值类型,调用方法时是复制了一份副本,并非传递引用,故index值一直未变.

将其改为引类型:

 var index = {id:0};
    var arr = [1, 2, 3, 4, 5, 6];
    function setIndex(idx, arry, state) {
        if (state) {
            idx.id++;
        } else {
            idx.id--;
        }
        document.getElementById('result').innerHTML = idx.id + ':' + arr[idx.id];
    }
    document.getElementById('a1').addEventListener('click', function () {
        setIndex(index, arr, 1)
    }, false)
    document.getElementById('a2').addEventListener('click', function () {
        setIndex(index, arr, 0)
    }, false);

应该是index++,传参后修改的是index副本,并非index

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