覆盖另一个函数JS中的变量

时间:2016-08-12 15:24:29

标签: javascript git

在实际运行之前,我是否可以调用函数然后覆盖变量的内容?

所以我有一个基本上可以拉入我的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";
);

6 个答案:

答案 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");