Javascript 制造全局变量的问题

Javascript 制造全局变量的问题,javascript,jquery,variables,global,Javascript,Jquery,Variables,Global,我对JavaScript和Jquery还是相当陌生的,但如果有人能帮我的话,我会非常感激,因为我已经为此奋斗了几个小时 我有一个函数,它是一个更大的插件函数的一部分(如果大家熟悉的话,由Gaya编写的QueryLoader2)。在我看到的函数中,有一个部分,它获取页面中加载的项目的百分比值: var completeImageLoading = function () { qLdone++; var percentage = (qLdone / qLimageCounter) *

我对JavaScript和Jquery还是相当陌生的,但如果有人能帮我的话,我会非常感激,因为我已经为此奋斗了几个小时

我有一个函数,它是一个更大的插件函数的一部分(如果大家熟悉的话,由Gaya编写的QueryLoader2)。在我看到的函数中,有一个部分,它获取页面中加载的项目的百分比值:

var completeImageLoading = function () {
    qLdone++;
    var percentage = (qLdone / qLimageCounter) * 100;

    if (qLoptions.percentage == true) {
        $(qLpercentage).text(Math.ceil(percentage) + "%");
    }

    if (qLdone == qLimageCounter) {
        destroyQueryLoader();
    }
}
“var percentage”部分是我需要的gloabal部分,因此数字百分比值可以被完全超出此部分的另一个函数使用(实际上是在另一个Javascript文件中)。我已尝试删除“var”,但不起作用


如果有人能帮忙,我会非常感激的!感谢您在您的职能范围之外投入:

var percentage;
在函数内部放置(no
var
):

基本上,在JavaScript中,与函数在同一位置声明的局部变量可以在该函数中使用(读写)。使用这种局部变量的函数称为闭包。

试试这个

var percentage;

var completeImageLoading = function () {
    qLdone++;
    percentage = (qLdone / qLimageCounter) * 100;

    if (qLoptions.percentage == true) {
        $(qLpercentage).text(Math.ceil(percentage) + "%");
    }

    if (qLdone == qLimageCounter) {
        destroyQueryLoader();
    }
}

如果您发送有关脚本的更多信息,将更容易帮助您,但我还是会尝试的。
首先,对于未定义的全局变量返回,您做了一些错误的事情。


看看这个,变量已经定义(不管在哪里),并且正在返回值。只需在调用变量之前验证是否调用函数(completeimageload()),因为在这种情况下,不需要定义变量,它是在调用函数completeimageload()时定义的。我们定义了一个默认值,以防我们从未在函数中调用它。

Hi Phrogz,感谢您的快速响应。我刚刚试过——把‘var百分比;’在脚本顶部,在completeImageLoading函数外部,然后从函数内部删除“var”,但现在在运行console.log时它返回为“undefined”。但是当我在CompleteMageLoading函数中运行console.log时,它会给出数值OK。所以它仍然不起作用:/@RichDean您需要创建一个精简的测试用例来共享。这项技术工作得非常好,所以您的实现不是很到位。为了进一步提供帮助,我们需要查看失败的实际代码。试着用一个显示问题的精简代码示例编辑你的问题;var completeImageLoading=function(){qLdone++;percentage=(qLdone/qLimageCounter)*100;if(qlpoptions.percentage==true){$(qLpercentage).text(Math.ceil(percentage)+“%”;}if(qLdone==qLimageCounter){destroyQueryLoader();}}console.log(percentage);'控制台日志(百分比);'返回“未定义”,而如果我移动“console.log(百分比);”在completeImageLoading函数中,它可以工作并提供所需的数值。只有我需要它在外面!发布您的代码,其中包括var diclaration和这两个函数。如果以正确的方式使用,上面的代码应该可以完美地工作
var percentage;

var completeImageLoading = function () {
    qLdone++;
    percentage = (qLdone / qLimageCounter) * 100;

    if (qLoptions.percentage == true) {
        $(qLpercentage).text(Math.ceil(percentage) + "%");
    }

    if (qLdone == qLimageCounter) {
        destroyQueryLoader();
    }
}