里面的document.ready全局JavaScript变量(Global javascript

2019-06-25 16:14发布

这是声明一个全局JavaScript变量的正确方法? 我想它的方式,不工作

$(document).ready(function() {

    var intro;

    if ($('.intro_check').is(':checked')) {
        intro = true;
        $('.intro').wrap('<div class="disabled"></div>');
    };

    $('.intro_check').change(function(){
        if(this.checked) {
            intro = false;
            $('.enabled').removeClass('enabled').addClass('disabled');
        } else {
            intro = true;
            if($('.intro').exists()) {
                $('.disabled').removeClass('disabled').addClass('enabled'); 
            } else {
                $('.intro').wrap('<div class="disabled"></div>');
            }
        }
    });
});

console.log(intro);

Answer 1:

如果你定义一个局部变量,你可能想使用某种形式的命名空间。 外面声明命名空间,那么你可以抛出任何你想要进去。 像这样...

var MyProject = {};
$(document).ready(function() {
    MyProject.intro = "";

    MyProject.intro = "something";
});

console.log(MyProject.intro); // "something"


Answer 2:

此声明

var intro;

外面$(document).ready()因为$(document).ready()将隐藏从全球范围内的变量。

var intro;

$(document).ready(function() {
    if ($('.intro_check').is(':checked')) {
        intro = true;
        $('.intro').wrap('<div class="disabled"></div>');
    };
    $('.intro_check').change(function(){
        if(this.checked) {
            intro = false;
            $('.enabled').removeClass('enabled').addClass('disabled');
        } else {
            intro = true;
            if($('.intro').exists()) {
                $('.disabled').removeClass('disabled').addClass('enabled'); 
            } else {
                $('.intro').wrap('<div class="disabled"></div>');
            }
        }
    });
});

据@Zakaria评论

其他方式:

window.intro = undefined;

$(document).ready(function() {
    if ($('.intro_check').is(':checked')) {
        window.intro = true;
        $('.intro').wrap('<div class="disabled"></div>');
    };
    $('.intro_check').change(function(){
        if(this.checked) {
            window.intro = false;
            $('.enabled').removeClass('enabled').addClass('disabled');
        } else {
            window.intro = true;
            if($('.intro').exists()) {
                $('.disabled').removeClass('disabled').addClass('enabled'); 
            } else {
                $('.intro').wrap('<div class="disabled"></div>');
            }
        }
    });
});

注意

console.log(intro);

DOM就绪功能(目前你已经)之外将记录undefined ,但是内DOM就绪时,它会给你真/假。

你外console.log执行之前DOM已准备就绪执行,因为DOM准备执行后所有资源似乎DOM即DOM准备后,所以我想你会总是得到荒谬结果。


据@ W0rldart的评论

我需要使用它的DOM准备功能之外

您可以使用下面的方法:

var intro = undefined;

$(document).ready(function() {
    if ($('.intro_check').is(':checked')) {
        intro = true;
        introCheck();
        $('.intro').wrap('<div class="disabled"></div>');
    };
    $('.intro_check').change(function() {
        if (this.checked) {
            intro = true;
        } else {
            intro = false;
        }
        introCheck();
    });

});

function introCheck() {
    console.log(intro);
}

变更后的价值intro我打电话,将与新的价值火的功能intro



Answer 3:

JavaScript有函数级的变量范围,这意味着你必须声明你的变量以外$(document).ready()函数。

或可替换地让你的变量具有全局作用域,只要不使用var关键字如下面的例子所示之前。 但是通常这被认为是不好的做法 ,因为它污染了全球范围内,但它是由你来决定。

$(document).ready(function() {
   intro = null; // it is in global scope now

要了解更多内容,请查看:

  • 解释JavaScript的范围和封锁


Answer 4:

使用window.intro$(document).ready()



Answer 5:

是这样的:把intro你的文件准备好,很好的讨论之外的位置: http://forum.jquery.com/topic/how-do-i-declare-a-global-variable-in-jquery @thecodeparadox是赫然快:P无论如何!

 var intro;

$(document).ready(function() {



    if ($('.intro_check').is(':checked')) {
        intro = true;
        $('.intro').wrap('<div class="disabled"></div>');
    };

    $('.intro_check').change(function(){
        if(this.checked) {
            intro = false;
            $('.enabled').removeClass('enabled').addClass('disabled');
        } else {
            intro = true;
            if($('.intro').exists()) {
                $('.disabled').removeClass('disabled').addClass('enabled'); 
            } else {
                $('.intro').wrap('<div class="disabled"></div>');
            }
        }
    });
});


Answer 6:

不像其他的编程语言,任何变量声明以外的任何功能,将自动成为全球性的,

<script>

//declare global variable
var __foo = '123';

function __test(){
 //__foo is global and visible here
 alert(__foo);
}

//so, it will alert '123'
__test();

</script>

你的问题是,你声明的变量里面ready()函数,这意味着它变得可见(范围)里面只有ready()函数,而不是外面,

解决方案:所以只让全球性的,即宣告这一个以外$(document).ready(function(){});



Answer 7:

使用window.intro = "value"; 里面准备好功能。 "value"可能是void 0 ,如果你希望它是undefined



Answer 8:

您可以定义文档准备函数内部的变量不VAR使它成为一个全局变量。 在JavaScript的任何变量声明不无功自动成为一个全局变量

$(document).ready(function() {
    intro =  "something";
});

虽然你不能马上使用的变量,但它会被其他函数访问



文章来源: Global javascript variable inside document.ready