Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS Hint-此函数的圈复杂度数&;Don';t在循环中生成函数_Javascript - Fatal编程技术网

Javascript JS Hint-此函数的圈复杂度数&;Don';t在循环中生成函数

Javascript JS Hint-此函数的圈复杂度数&;Don';t在循环中生成函数,javascript,Javascript,JavaScript不会在循环中生成函数,并显示圈复杂度。 我无法绕过JSHint的错误消息。以下是我正在使用的循环: var keys = document.querySelectorAll('#calculator span'); var operators = ['+', '-', 'x', '÷']; var decimalAdded = false; for (var i = 0; i < keys.length; i++) { keys[i].onclick = functio

JavaScript不会在循环中生成函数,并显示圈复杂度。 我无法绕过JSHint的错误消息。以下是我正在使用的循环:

var keys = document.querySelectorAll('#calculator span');
var operators = ['+', '-', 'x', '÷'];
var decimalAdded = false;
for (var i = 0; i < keys.length; i++) {
keys[i].onclick = function (e) {
    var input = document.querySelector('.screen');
    var inputVal = input.innerHTML;
    var btnVal = this.innerHTML;
    if (btnVal === 'C') {
        input.innerHTML = '';
        decimalAdded = false;
    } else if (btnVal === '=') {
        var equation = inputVal;
        var lastChar = equation[equation.length - 1];
        equation = equation.replace(/x/g, '*').replace(/÷/g, '/');
        if (operators.indexOf(lastChar) > -1 || lastChar === '.'){
            equation = equation.replace(/.$/, '');
        }                
        if (equation){
            input.innerHTML = (new Function('return ' + equation))();
        }                
        decimalAdded = false;
    } else if (operators.indexOf(btnVal) > -1) {
        var lastChar = inputVal[inputVal.length - 1];
        if (inputVal !== '' && operators.indexOf(lastChar) === -1){
            input.innerHTML += btnVal;
        }                
        else if (inputVal === '' && btnVal === '-'){
            input.innerHTML += btnVal;
        }                
        if (operators.indexOf(lastChar) > -1 && inputVal.length > 1) {
            input.innerHTML = inputVal.replace(/.$/, btnVal);
        }
        decimalAdded = false;
    } else if (btnVal === '.') {
        if (!decimalAdded) {
            input.innerHTML += btnVal;
            decimalAdded = true;
        }
    } else {
        input.innerHTML += btnVal;
    }
    e.preventDefault();
};
var-keys=document.querySelectorAll(“#计算器span”);
变量运算符=['+','-','x','÷'];
var decimalAdded=假;
对于(变量i=0;i-1 | | lastChar=='。){
方程式=方程式。替换(/.$/,'');
}                
if(等式){
input.innerHTML=(新函数('return'+公式))();
}                
十进制=假;
}else if(运算符索引OF(btnVal)>-1){
var lastChar=inputVal[inputVal.length-1];
if(inputVal!=''&&operators.indexOf(lastChar)==-1){
input.innerHTML+=btnVal;
}                
else if(inputVal==''&&btnVal==='-')){
input.innerHTML+=btnVal;
}                
if(operators.indexOf(lastChar)>-1&&inputVal.length>1){
input.innerHTML=inputVal.replace(/.$/,btnVal);
}
十进制=假;
}否则如果(btnVal=='。){
如果(!十进制添加){
input.innerHTML+=btnVal;
十进制=真;
}
}否则{
input.innerHTML+=btnVal;
}
e、 预防默认值();
};
}


如何减少此函数的圈复杂度是12,所以圈复杂度基本上是通过函数的可能路径数的度量。所以它将所有循环和条件都相乘。您有一个
for()
循环,其中包含一整堆嵌套的
if()
else
块,因此,是的,这将给出非常大的复杂性分数

减少它的方法是将代码拆分为多个函数。每个函数都应该完成部分工作,因此复杂性得分较低。因为复杂度会随着每个条件的增加而增加,所以拆分它们将产生几个总复杂度低得多的函数


具体如何分解这些函数取决于您,但一般建议是尽可能地分解它们;理想的函数是只做一件事,而不做更多的事情。

通过编写不太复杂的循环来减少循环复杂度的可能重复。圈复杂性表明概念混乱。它也可以被称为“意大利面条指数”。想想这个问题,想想它是如何分解的,是如何由碎片组成的。然后写下每一段。然后把它们组合起来。