[英]global javascript variable becomes undefined inside part of object constructor
[英]JavaScript global variable becomes undefined inside function
由於某種原因,JavaScript全局變量在函數內部變得未定義。 不知道為什么。 您可以復制並運行代碼。 如您所見,全局變量'target'是在第一個警報中定義的,但隨后在函數中變得未定義。 這是代碼:
<!doctype html>
<html>
<head>
<title>Colors</title>
</head>
<body onload="do_game()">
<script>
var target;
var guess_input;
var finished = false;
var guesses = 0;
var colors = ['blue','brown','gold','gray','green','orange','pink','purple','red','yellow'];
function do_game() {
var random_number = Math.random() * 10;
var index = Math.floor(random_number);
var target = colors[index];
alert("target = " + target);
while (!finished) {
guess_input = prompt("I am thinking of one those colors:\n\n"+ colors +
"\n\nWhat color am I thinking of?").toLowerCase();
guesses += 1;
finished = check_guess();
}
}
function check_guess() {
alert('guess_input=' + guess_input +', target=' + target);
return true;
}
</script>
</body>
</html>
您正在函數內部再次聲明變量。 var target = colors[index];
。 如果要為全局target
分配colors[index]
,則不要使用var
,否則它將分配給函數內的局部變量。
同意,刪除var將解決此問題。 但是,主要問題是您沒有為全局目標分配任何內容。
當您執行“ var target = colors [index];”時,您創建了一個名為target的新局部變量,該局部變量僅在do_game函數中可見。 因此,現在您有了兩個目標變量,一個是局部變量,一個是全局變量。 當您嘗試在check_guess()中訪問它時,您訪問了尚未分配的全局目標。 但是,如果您從check_guess中刪除代碼並將其放在do_game中,則它實際上可以工作。
只是想解釋為什么它發生的問題。
如果您使用var關鍵字或不使用var定義任何變量,則在函數外部,它將自動成為全局變量。
如果在沒有var關鍵字的任何函數體中定義了變量,它將也用作全局變量,但是如果使用var定義它,它將成為特定函數的局部變量
您應該將“ guess_input”的返回值添加到check_guess函數的參數中
function do_game() {
var random_number = Math.random() * 10;
var index = Math.floor(random_number);
var target = colors[index];
alert("target = " + target);
while (!finished) {
guess_input = prompt("I am thinking of one those colors:\n\n"+ colors +
"\n\nWhat color am I thinking of?").toLowerCase();
guesses += 1;
finished = check_guess(guess_input);
}
}
function check_guess(target) {
alert('guess_input=' + guess_input +', target=' + target);
return true;
}
檢查一下-https: //jsfiddle.net/sdqyqx21/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.