在函数jQuery之间传递的全局变量

在函数jQuery之间传递的全局变量,jquery,function,variables,global-variables,Jquery,Function,Variables,Global Variables,我正在if…else语句中设置一个变量。但是,当我尝试在另一个函数中调用该变量时,我得到一个错误,即该变量未定义。如何设置全局变量 function username_check(){ username = $('#username').val(); if(username == "" || username.length < 7 || username.indexOf(' ') > -1){ usernameFilled = 0; else{ usernameF

我正在if…else语句中设置一个变量。但是,当我尝试在另一个函数中调用该变量时,我得到一个错误,即该变量未定义。如何设置全局变量

function username_check(){  
username = $('#username').val();
if(username == "" || username.length < 7 || username.indexOf(' ') > -1){
    usernameFilled = 0;
else{
    usernameFilled = 1;
}   
}

function email_check(){ 
email = $('#email').val();
if(email == "" || email.indexOf(' ') > -1) {
    emailFilled = 0;
}else{
    emailFilled = 1;
}
}

function password_length(){ 
password = $('#password').val();
if(password == "" || password.indexOf(' ') > -1) {
    passwordFilled = 0;
}else{
    passwordFilled = 1;
}
}

function password_check(){  
  password2 = $('#password2').val();
  password = $('#password').val();
  if(password2.length > 7 && password2 == password) {
    password2Filled = 1; /**setting the variable**/
  }else{
    password2Filled = 0;
  }
}

function upload(){
if (usernameFilled == 0 || emailFilled == 0 || passwordFilled == 0 || password2Filled == 0) {
    alert('All fields are required');
}else{
    /**upload to database**/
}
函数username\u check(){
username=$('#username').val();
如果(username==“”| | username.length<7 | | username.indexOf(“”)>-1){
usernameFilled=0;
否则{
usernameFilled=1;
}   
}
函数email_check(){
email=$('#email').val();
if(email===“”| email.indexOf(“”)>-1){
emailFilled=0;
}否则{
电子邮件填充=1;
}
}
函数密码_length(){
password=$('#password').val();
if(password==“”| | password.indexOf(“”)>-1){
passwordFilled=0;
}否则{
passwordFilled=1;
}
}
函数密码检查(){
password2=$('#password2').val();
password=$('#password').val();
if(password2.length>7&&password2==密码){
password2Filled=1;/**设置变量**/
}否则{
password2Filled=0;
}
}
函数上传(){
如果(usernameFilled==0 | | emailFilled==0 | | passwordFilled==0 | | password2Filled==0){
警报(“所有字段均为必填项”);
}否则{
/**上传到数据库**/
}

通过在所有函数范围之外定义全局变量,可以在JavaScript中创建全局变量。如下所示:

<script type="text/javascript">
var globalVariable;


function blah()
{
    globalVariable = "something";
}

function anotherFunction()
{
    alert(globalVariable);
}
</script>

var全局变量;
函数blah()
{
globalVariable=“某物”;
}
函数另一个函数()
{
警报(全球可变);
}

声明应在任何执行上下文之外创建“全局对象”。

只需返回password2Filled并将其保存在函数外部,而不是设置全局变量。然后您可以将其传递到下一个函数


尽量避免使用全局变量,因为它们会使程序变得杂乱无章,很难看到代码流,也很难创建可重用的代码。

您可能以错误的顺序调用函数,或者做了一些其他错误的事情,因为它对我来说工作正常,所以稍微编辑代码以测试它:

function password_check(){  
  var password2 = $('#password2').val(), 
      password = $('#password').val();
  password2Filled = (password2.length > 7 && password2 == password) ? 1:0;
}

function upload(){
    console.log(password2Filled); //prints 0 or 1 just fine ???
}

$("#btn").on('click', function() {
    password_check();
    upload();
});

请在jsfiddle上重现您的问题您确定在调用
密码检查后调用
upload
?@Tats\u innit:不应以特殊方式声明全局变量。它的声明将在第一次初始化时进行entry@Tats_innit:-
var
是局部变量与全局变量的不同之处这是关于全局变量的。如果不指定
var
,则变量将变为全局变量,
a=1;
等于
window.a=1;
@mr.musicman,然后对这些函数的调用执行相同的操作(复制粘贴调用到
password\u check
upload
!这是真的,我尝试调用的函数不止一个。我会更新我的问题以向您展示。也许您可以发现错误。谢谢!我尝试过了。可能在那里做了一些错误,我只是不断得到未定义变量的错误。我必须这样做请再试一次……实际上,您可以通过使用window对象来声明全局变量,比如window.myVar=something,只要跳过'var'关键字就可以了,无论它在什么范围内。@adeneo您是否有任何官方文档或来源可以引用来指导您使用该方法?仅仅因为它有效并不意味着它是一个文档化的方法最佳实践。没有,但除非您在严格模式下使用ECMA 5,否则它会工作得很好,但是声明变量没有错,据我所知,这是一种良好的实践,也是推荐的做法,但在这种情况下,无法在全局范围内声明几乎肯定不是问题。实际上,MDN文档使用函数外部的变量是可选的;将值赋给未声明的变量会隐式地将其声明为全局变量(也是全局对象的属性)。区别在于,声明的变量是全局对象的不可配置属性,而未声明的变量是可配置的。
@adeneo请仔细阅读:
function password_check(){  
  var password2 = $('#password2').val(), 
      password = $('#password').val();
  password2Filled = (password2.length > 7 && password2 == password) ? 1:0;
}

function upload(){
    console.log(password2Filled); //prints 0 or 1 just fine ???
}

$("#btn").on('click', function() {
    password_check();
    upload();
});