Ale*_*lex 36 javascript jquery scope global-variables
哪种声明全局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);
Run Code Online (Sandbox Code Playgroud)
McG*_*gle 76
如果要声明全局变量,则可能需要使用某种命名空间.只需在外部声明命名空间,然后就可以将任何想要的东西扔进去.像这样...
var MyProject = {};
$(document).ready(function() {
MyProject.intro = "";
MyProject.intro = "something";
});
console.log(MyProject.intro); // "something"
Run Code Online (Sandbox Code Playgroud)
the*_*dox 31
宣布这个
var intro;
Run Code Online (Sandbox Code Playgroud)
在因果之外$(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>');
}
}
});
});
Run Code Online (Sandbox Code Playgroud)
其他方式:
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>');
}
}
});
});
Run Code Online (Sandbox Code Playgroud)
console.log(intro);
Run Code Online (Sandbox Code Playgroud)
在DOM就绪函数之外(目前你已经)会记录undefined
,但在DOM准备好之前它会给你真/假.
console.log
在DOM就绪执行之前你的外部执行,因为DOM准备执行后所有资源都出现在DOM之后,即在DOM准备好之后,所以我认为你总会得到荒谬的结果.我需要在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);
}
Run Code Online (Sandbox Code Playgroud)
更改后,intro
我调用了一个函数,该函数将使用新值触发intro
.
Sar*_*raz 16
JavaScript具有函数级变量作用域,这意味着您必须在$(document).ready()
函数外声明变量.
或者,为了使您的变量具有全局范围,只需var
在之前使用关键字,如下所示.但一般来说,这被认为是不好的做法,因为它污染了全球范围,但由您来决定.
$(document).ready(function() {
intro = null; // it is in global scope now
Run Code Online (Sandbox Code Playgroud)
要了解有关它的更多信息,请查看:
window.intro
在里面使用$(document).ready()
.