gpt4 book ai didi

javascript - JS 函数内的全局变量问题

转载 作者:行者123 更新时间:2023-11-28 17:48:32 28 4
gpt4 key购买 nike

我有以下脚本:

    <script>
var xmlhttp = new XMLHttpRequest();
var myApp = angular.module("myApp", []);

xmlhttp.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
response = this.responseText;
var myObj = JSON.parse(response);
console.log(myObj);

}
};

xmlhttp.open("GET", "functions.php?action=getuserdata&id=" + document.getElementById('userID').innerHTML, true);
xmlhttp.send();

console.log(myObj);

myApp.controller("myCtrl", function ($scope) {
$scope.firstName = myObj[0].firstname;
$scope.lastName = myObj[0].lastname;
$scope.email = myObj[0].email;
$scope.cell = myObj[0].cell;
$scope.domainname = myObj[0].domainname;
$scope.tfamethod = myObj[0].tfamethod;
$scope.said = myObj[0].said;
});
</script>

现在我的理解是“var”关键字全局分配一个变量,可以从窗口内的任何位置访问该变量。我在 onreadystatechange 函数中设置了 var,并且在执行第一个 console.log 时可以看到它,但是当我在函数外部再次记录它时,我将其设置为“未定义”。我对var的理解不正确吗?如果是这样,如何修复代码以便能够从函数外部访问 myObj?

最佳答案

该代码有两个问题:

var

Now my understanding is that the 'var' keyword, assigns a variable globally which is accessible from anywhere within the window.

这种理解是错误的。 var 在出现 var 的函数内声明一个变量。要声明全局变量,请在所有函数之外声明它。

或者更好的是,不要。浏览器上的全局命名空间非常拥挤。相反,将所有代码包装在作用域函数中,并将“全局变量”放在那里。您的所有代码都可以访问它们,但实际上并不具有全局性。

时间

另外:您不能在代码中使用 myObj ,因为无论在何处声明它,它都尚未被分配。请参阅this question's answers为什么。

<小时/>

这是带有作用域函数的代码,并在正确的位置(内部回调)使用myObj;另外,由于您只使用返回数组中的第一个条目,因此您可以访问该条目一次而不是重复访问:

(function() {
var xmlhttp = new XMLHttpRequest();
var myApp = angular.module("myApp", []);

xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
response = this.responseText;
var myObj = JSON.parse(response)[0]; // Note the [0]
myApp.controller("myCtrl", function($scope) {
$scope.firstName = myObj.firstname;
$scope.lastName = myObj.lastname;
$scope.email = myObj.email;
$scope.cell = myObj.cell;
$scope.domainname = myObj.domainname;
$scope.tfamethod = myObj.tfamethod;
$scope.said = myObj.said;
});
}
};

xmlhttp.open("GET", "functions.php?action=getuserdata&id=" + document.getElementById('userID').innerHTML, true);
xmlhttp.send();
})();

关于javascript - JS 函数内的全局变量问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46150120/

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