在实际运行之前,我是否可以调用函数然后覆盖变量的内容?
所以我有一个基本上可以拉入我的Git配置文件的函数:
var GetGitInfo = function() {
var xhr = new XMLHttpRequest();
var gitURL = "https://api.github.com/users/myself/repos";
xhr.open("GET", gitURL);
xhr.send(null);
xhr.onreadystatechange = function() {
var DONE = 4; // readyState 4 means the request is done.
var OK = 200; // status 200 is a successful return.
if (xhr.readyState === DONE) {
if (xhr.status === OK) {
// console.log(xhr.responseText);
console.log(JSON.parse(xhr.responseText));
} else {
console.log('Error: ' + xhr.status);
}
}
};
}
然后我通过执行GetGitInfo();
来调用该函数,这一切都正常。
但是,如果我想调用该函数并替换gitURL
变量,我将如何实现?
类似
GetGitInfo(
gotURL= "https://api.github.com/users/new_user/repo";
);
答案 0 :(得分:1)
您无法从函数外部将局部变量修改为函数。它们是函数实现的私有部分。
但是,既然它是你自己的函数,你可以创建一个可以传递给函数的参数。您甚至可以将参数设置为可选参数,以便在未传递参数时将初始值作为默认值。
var GetGitInfo = function(url) {
var xhr = new XMLHttpRequest();
var gitURL = url || "https://api.github.com/users/myself/repos";
xhr.open("GET", gitURL);
xhr.send(null);
xhr.onreadystatechange = function() {
var DONE = 4; // readyState 4 means the request is done.
var OK = 200; // status 200 is a successful return.
if (xhr.readyState === DONE) {
if (xhr.status === OK) {
// console.log(xhr.responseText);
console.log(JSON.parse(xhr.responseText));
} else {
console.log('Error: ' + xhr.status);
}
}
};
}
然后,您可以按照使用方式使用该功能,也可以传入要使用的URL:
getGitInfo(); // uses your default URL
getGitInfo("http://someURL"); // uses the URL you pass in
仅供参考,这个函数看起来最终需要返回一个promise或接受一个回调,这样你就可以将结果传回给调用者了。
答案 1 :(得分:1)
从上面的代码片段中,您需要将url设置为函数参数,以便在调用它时使用指定的url。
var GetInfo = function(url) {
var xhr = new XMLHttpRequest();
xhr.open("GET", url);
xhr.send(null);
xhr.onreadystatechange = function() {
var DONE = 4; // readyState 4 means the request is done.
var OK = 200; // status 200 is a successful return.
if (xhr.readyState === DONE) {
if (xhr.status === OK) {
// console.log(xhr.responseText);
console.log(JSON.parse(xhr.responseText));
} else {
console.log('Error: ' + xhr.status);
}
}
};
GetInfo("https://api.github.com/users/myself/repos");
答案 2 :(得分:1)
你应该在函数上执行toString():
GetGitInfo.toString()
然后你应该进行文本搜索并替换变量及其数据:
GetGitInfo.toString().substring(0,GetGitInfo.indexOf('somestring'))+'gitUrl="newURL"'+GetGitInfo.toString().substring(.......)
然后你应该评估那个字符串!
或者,您知道,使用函数参数。无论哪种方式。无论什么都是最简单的。
答案 3 :(得分:0)
使用参数
var getData = function(url){
// url can be used here
}
var data = getData("http://apiurl.xy")
答案 4 :(得分:0)
将参数传递给函数:
var GetGitInfo = function(gitURL) {
var xhr = new XMLHttpRequest();
xhr.open("GET", gitURL);
xhr.send(null);
xhr.onreadystatechange = function() {
var DONE = 4; // readyState 4 means the request is done.
var OK = 200; // status 200 is a successful return.
if (xhr.readyState === DONE) {
if (xhr.status === OK) {
// console.log(xhr.responseText);
console.log(JSON.parse(xhr.responseText));
} else {
console.log('Error: ' + xhr.status);
}
}
};
}
GetGetInfo("https://api.github.com/users/myself/repos");
答案 5 :(得分:0)
只需在函数中添加一个参数:
var GetGitInfo = function(gitURL) {
var xhr = new XMLHttpRequest();
xhr.open("GET", gitURL);
xhr.send(null);
xhr.onreadystatechange = function() {
var DONE = 4; // readyState 4 means the request is done.
var OK = 200; // status 200 is a successful return.
if (xhr.readyState === DONE) {
if (xhr.status === OK) {
// console.log(xhr.responseText);
console.log(JSON.parse(xhr.responseText));
} else {
console.log('Error: ' + xhr.status);
}
}
};
}
并将其称为:
GetGitInfo("https://api.github.com/users/myself/repos");