Javascript 函数之间的Jquery和全局变量范围问题

Javascript 函数之间的Jquery和全局变量范围问题,javascript,jquery,Javascript,Jquery,我有以下代码: $(document).ready(function () { var english = ""; var spanish = ""; $.get("./gamelist-english.txt",function(data){ english = data; }); $.get("./gamelist-spanis

我有以下代码:

$(document).ready(function () {

            var english = "";
            var spanish = "";

            $.get("./gamelist-english.txt",function(data){
                english = data;
                });

            $.get("./gamelist-spanish.txt",function(data){
                spanish = data;
                });

        $('#compare').mergely({
            cmsettings: { readOnly: true, lineNumbers: true },
            lhs: function(setValue) {
                setValue(english);
            },
            rhs: function(setValue) {
                setValue(spanish);
            }
        });

    });
(顺便说一句,我正在这里使用mergely库,但我认为这不重要)

我的问题是,“西班牙语”和“英语”这两个变量都不是全局变量,因此$(“#compare”).mergely无法获取它们的值(它说它们都是空的,但事实并非如此)。我怎样才能解决这个问题?我认为,通过在任何函数之外声明任何变量,它们会自动变为全局变量,但显然这不起作用,或者我有点迷路了


非常感谢。

问题不在于他们不是全球人。你有他们在的范围是好的

问题是,在这些变量中有值之前,您正在调用
mergely
,因为ajax是异步的。请等待呼叫完成:

$(document).ready(function () {
    var english = "";
    var spanish = "";

    $.when(
        $.get("./gamelist-english.txt",function(data){
            english = data;
        }),
        $.get("./gamelist-spanish.txt",function(data){
            spanish = data;
        })
    ).then(function() {
        $('#compare').mergely({
            cmsettings: { readOnly: true, lineNumbers: true },
            lhs: function(setValue) {
                setValue(english);
            },
            rhs: function(setValue) {
                setValue(spanish);
            }
        });
    });
});
但是,您可以完全避免使用这些变量,因为当您使用
$时,回调函数从两个承诺中接收值;请注意,由于它是一个
$.get
,因此该值是一个数组,其中数据作为数组中的第一项

$(document).ready(function () {
    $.when(
        $.get("./gamelist-english.txt"),
        $.get("./gamelist-spanish.txt")
    ).then(function(english, spanish) {
        $('#compare').mergely({
            cmsettings: { readOnly: true, lineNumbers: true },
            lhs: function(setValue) {
                setValue(english[0]); // <== Note the [0]
            },
            rhs: function(setValue) {
                setValue(spanish[0]); // <== Note the [0]
            }
        });
    });
});
$(文档).ready(函数(){
美元。什么时候(
$.get(“./gamelist english.txt”),
$.get(“./gamelist西班牙语.txt”)
).然后(函数(英语、西班牙语){
$(“#比较”)。合并({
cmsettings:{readOnly:true,lineNumbers:true},
lhs:功能(设定值){

setValue(英语[0]);//它们不需要是全局的。它们的作用域很好。(你在传递给
ready
的匿名函数中声明它们,而不是全局的)。^^^昆廷说了什么。此外,不让它们成为全局的是一件好事™. :-)@Quentin如果我在GET函数中写“console.log(english)”,我可以得到值,但是,如果我在.mergely()中做同样的事情,console.log不会打印任何内容:S如果作用域正常,什么是故障?(T.J.Crowder回答)@阿图罗-看重复的问题。@Quentin非常感谢你!是的!这很有效。我没有想到。非常感谢!