gpt4 book ai didi

javascript - 函数没有返回值

转载 作者:行者123 更新时间:2023-11-28 13:22:36 24 4
gpt4 key购买 nike

我才刚刚开始学习如何重构代码,但未能抽象出一个简单的函数。我将参数传递给 checkAnwser 并且它可以工作,但是 count 已“丢失”

我无法在此处获取/附加“计数”:

jsfiddle

<input data-correctanswer="javascript" id="answer1" name="" type="text">This works fine (no special chars)
<br/>
<button id="btn1">check 1</button>
<br/>
<input data-correctanswer="jávascripté" id="answer2" name="" type="text">
<br/>
<button id="btn2">check 2</button>
<div style="border: 1px solid;" id="result"></div>

Javascript:

 $(document).ready(function () {

var count;
$('#btn1').click(function () {
checkAnswer($('#answer1').data('correctanswer'), $('#answer1').val());
$('#result').append('result: ').append(count); <-- does not read count
}); // end of click
$('#btn2').click(function () {
checkAnswer($('#answer2').data('correctanswer'), $('#answer2').val());
$('#result').append('result: ').append(count); // <-- does not read count
}); // end of click


function checkAnswer(coorAns, UserAnswer) {
var count = 0;
// var coorAns = $('input[type=text]').data('correctanswer');
// var UserAnswer = $('input[type=text]').val();
var mistakesAllowed = 1;

if (UserAnswer === coorAns) {
count = count + 2;
}
for (i = 0; i < coorAns.length; i++) {
if (coorAns.charAt(i) !== UserAnswer.charAt(i)) {
mistakesAllowed--; // reduce one mistake allowed
if (mistakesAllowed < 1) { // and if you have more mistakes than allowed
count = count + 1;
}
if (mistakesAllowed < 0) {
count = count - 2
break;
}
}
}
console.log('final count: ' + count);
return count;
}

});

最佳答案

阿德内奥所说:

 var count; //here it's defined.
$('#btn1').click(function () {
count = checkAnswer($('#answer1').data('correctanswer'), $('#answer1').val());
$('#result').append('result: ').append(count);
}); // end of click
$('#btn2').click(function () {
count = checkAnswer($('#answer2').data('correctanswer'), $('#answer2').val());
$('#result').append('result: ').append(count);
}); // end of click

您的函数checkAnswer返回一个名为count的值。该值可以分配给变量count

您的想法可能是在函数 checkAnswer 中分配 count 也会将其分配给函数外部的变量 count 。然而,这两个变量位于两个不同的 scopes 中除非您将函数的结果分配给函数外部的变量 count,否则它们不会相互连接。

更准确:

checkAnswer 与第一个 count 变量处于同一范围。这意味着你可以这样做:

var count = 0;
console.log(count); //will log 0.
function checkAnswer()
{
count = 1;
}
checkAnswer();
console.log(count); //will log 1.

但是,当您在函数内使用运算符 var 时,它将创建一个绑定(bind)到该函数范围的变量(它成为私有(private)变量),只能在该函数内访问。除非您将其返回到该函数范围之外的变量。

var count = 0;
console.log(count); //will log 0.
function checkAnswer()
{
var count = 1;
}
checkAnswer();
console.log(count); //will log 0.

有关 Stack Overflow 上范围的更多信息:

What is the scope of variables in JavaScript?

奖金:

对代码的一点效率建议

 var count;
$('#btn1', '#btn2').click(function () {
var buttonId = $(this).attr("id").substr(4); //will result in 1 or 2
count = checkAnswer($('#answer' + buttonId ).data('correctanswer'), $('#answer' + buttonId ).val());
$('#result').append('result: ').append(count);
}); // end of click

这会将其简化为一个通用函数。因此,当您需要更新代码时,只需更新一个函数,而不是同一代码的多个实例。

关于javascript - 函数没有返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31904684/

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