JavaScript中的全局变量在函数内进行更改

时间:2014-03-06 17:11:00

标签: javascript html function variables

您好我正在尝试从函数中更改一个全局变量,但似乎这不会起作用。这是我的JS:

var currentImg = 0;
var totalImg = 0;
var stored_year = 0;
var newYear = 0;    //the variable i want to edit

$("a.work").click(function(){
    var newYear = $(this).html();   // how I want it to be edited
    console.log(newYear);
});

$("#next-button").click(function() {
    if (currentImg == totalImg) {
        currentImg = 0;
    }
    else {
        currentImg++;
    }
    changeImg();
});

$("#previous-button").click(function() {
    if (currentImg == 0) {
        currentImg = totalImg;
    }
    else {
        currentImg--;
    }
    changeImg();
});

function changeImg(galleryYear) {

    if (galleryYear === stored_year) {


        $("#gallery-image").html("<img src='" + galleryYear.x_src[currentImg] + "'>");
        $("#gallery-title").html(galleryYear.x_title[currentImg]);
        $("#gallery-medium").html(galleryYear.x_medium[currentImg]);
        $("#gallery-size").html(galleryYear.x_size[currentImg]);
        $("#gallery-date").html(galleryYear.x_date[currentImg]);

        var userCurrent = currentImg + 1;
        var userTotal = galleryYear.x_id.length;

        $("#current-post").html(userCurrent);
        $("#post-total").html(userTotal);

        var galWidth = $("#gallery-image" > "img").width();
        $("#gallery").width(galWidth);

    }
    else {

        currentImg = 0;
        $("#gallery-image").html("<img src='" + galleryYear.x_src[currentImg] + "'>");
        $("#gallery-title").html(galleryYear.x_title[currentImg]);
        $("#gallery-medium").html(galleryYear.x_medium[currentImg]);
        $("#gallery-size").html(galleryYear.x_size[currentImg]);
        $("#gallery-date").html(galleryYear.x_date[currentImg]);

        var userCurrent = currentImg + 1;
        var userTotal = galleryYear.x_id.length;

        $("#current-post").html(userCurrent);
        $("#post-total").html(userTotal);

        var galWidth = $("#gallery-image" > "img").width();
        $("#gallery").width(galWidth);

        $("#gallery-type").html('<img id="gallery-switch" alt="Kyle Breitenbach Art Gallery Icon" src="images/gallery-icon.png" onClick="gallerySwitch('+window.newYear+')">');

        stored_year = galleryYear;
    }

}

t = 100;
d = 50;

function gallerySwitch(newYear){
    $("#gallery-control-bar").fadeOut(t);
    $("#gallery-image").fadeOut(t);
    $("#info").fadeOut(t);
    $(".gallery-viewer").fadeOut(t);
    $('div.'+newYear).delay(t+d).fadeIn(t); // still not returning a number
}                                                  // other than 0.

function switchBack(){
    currentImg = parseInt($(this).attr('id'));
    alert(currentImg);

    $(".gallery-viewer").fadeOut(t);
    $("#gallery-control-bar").delay(t+d).fadeIn(t);
    $("#gallery-image").delay(t+d).fadeIn(t);
    $("#info").delay(t+d).fadeIn(t);
}

var navB = 0;

$("#mobileNav").click(function() {
    if (navB == 0) {
        $("#mobileMenu").fadeIn(t);
        navB++;
    }
    else {
        $("#mobileMenu").fadeOut(t);
        navB--;
    }
});



$(document).ready(function() {
    changeImg(galleryYear);
});

如何在函数中创建变量全局?

4 个答案:

答案 0 :(得分:3)

您可以拥有多个具有相同名称的变量,这些变量将相互遮蔽。如果要使用现有变量,请不要添加var

$("a.work").click(function(){
    newYear = $(this).html();
    console.log(newYear);
});

答案 1 :(得分:2)

如果您希望新年获得$('a.work')值,请不要在方法中再次声明新年:

$("a.work").click(function(){
    newYear = $(this).html();   // how I want it to be edited
    console.log(newYear);
});

答案 2 :(得分:1)

你已经在函数中添加了var new Year =,这将创建一个本地版本。让它成为新的一年=

答案 3 :(得分:1)

如果您创建一个与全局同名的局部变量,它将优先:

var newYear = 0;
$("a.work").click(function(){
    var newYear = $(this).html(); // This is not your global newYear
}

您必须使用完全限定名称:

var newYear = 0;
$("a.work").click(function(){
    var newYear = $(this).html(); // This is not your global newYear
    window.newYear  = 'This is your global newYear';
}

但是使用全局变量的代码已经很难维护而没有重复的名称。我建议你使用独特的名字。