首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaScript。返回1到10之间的随机数不能正常工作

JavaScript。返回1到10之间的随机数不能正常工作
EN

Stack Overflow用户
提问于 2014-11-23 20:09:30
回答 1查看 70关注 0票数 0

所以我的代码是产卵15个项目,我需要使,用户点击任何项目后,它将返回唯一的数字。但是现在,在点击所有返回相同数字的项目之后。

代码语言:javascript
复制
for (var t = 0; t < 16; t++) {
    ....//PART OF CODE
    var min = 1;
    var max = 10;
    var random = Math.floor(Math.random() * (max - min + 1)) + min;
    _chestArr[t].addEventListener('click',function(){
    var tezt = document.createTextNode(random);
    document.body.appendChild(tezt);
    },false);
}
EN

回答 1

Stack Overflow用户

发布于 2014-11-23 20:12:38

这不是随机部分的问题,而是您正在创建的事件处理函数紧接在变量random上的事实,而不是创建单个函数时它所具有的值。因此,它们都可以看到您分配给它的最后一个值。

修复此问题的典型方法是使用构建器函数或Function#bind

Builder函数:

代码语言:javascript
复制
for (var t = 0; t < 16; t++) {
    ....//PART OF CODE
    var min = 1;
    var max = 10;
    var random = Math.floor(Math.random() * (max - min + 1)) + min;
    _chestArr[t].addEventListener('click',buildHandler(random),false);
}
function buildHandler(r) {
    return function(){
        var tezt = document.createTextNode(r);
        document.body.appendChild(tezt);
    };
}

Function#bind

代码语言:javascript
复制
for (var t = 0; t < 16; t++) {
    ....//PART OF CODE
    var min = 1;
    var max = 10;
    var random = Math.floor(Math.random() * (max - min + 1)) + min;
    _chestArr[t].addEventListener('click',function(r){
    var tezt = document.createTextNode(r);
    document.body.appendChild(tezt);
    }.bind(null, random),false);
}

请注意,Function#bind选项将影响处理程序中的this的值,而构建器函数版本不会影响。您没有在处理程序中使用this,但如果使用了,则可以使用构建器函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27088776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档