首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript全局变量未更新

JavaScript全局变量未更新
EN

Stack Overflow用户
提问于 2012-03-11 21:50:27
回答 2查看 1.8K关注 0票数 0

我正在写的一些jQuery有一些逻辑上的问题。我怀疑我的全局变量做错了什么,但我不能确切地确定问题是什么。我在运行时记录所有内容,并且出于某种原因,在我的rollDown()函数中,尽管我使用的是id++,但我的全局id变量没有更新(如日志中所示)。

我需要更新我的全局变量,以便当我单击header > a时,else if语句将运行,而不是再次触发rollDown()

相关代码如下:

代码语言:javascript
复制
var id = 0;
var animSpeed = 0;
var animDelay = 0;
var working = 0;
var items = 0;

function logs() {
    "use strict";
    console.log('id: ' + id);
    console.log('-----');
    console.log('animSpeed: ' + animSpeed);
    console.log('-----');
    console.log('animDelay: ' + animDelay);
    console.log('-----');
    console.log('working: ' + working);
    console.log('==============');
}

function rollDown(items, id) {
    "use strict";
    var dist = $('li').eq(id).outerHeight(), slideDown = {'margin-top' : '+=' + dist + 'px'};
    console.log('items: ' + items + ' & id: ' + id);
    if (id <= items) {
        if (id === 0) {
            $('#toggle').html('Hide &uarr;');
        }
        $('li').not($('li').eq(id).prevAll()).delay(animDelay).animate(slideDown, animSpeed);
        id++;
        logs();
        rollDown(items, id);
    } else {
        console.log('herp derp');
        logs();
    }
}

function getVals() {
    "use strict";
    animSpeed = $('#speed').val();
    animDelay = $('#delay').val();
}

function resetPosition() {
    "use strict";
    $('li').stop().css('margin-top', 0);
    id = 0;
    working = 0;
    $('#toggle').html('Show &darr;');
}

$(function () {
    "use strict";
    $('header > a').click(function () {
        if (id === 0 && working === 0) {
            getVals();
            items = $('ul').children().length;
            var z;
            for (z = 0; z < items; z++) {
                $('li').eq(z).css('z-index', items - z);
            }
            working = 1;
            rollDown(items, id);
        } else if (id !== 0) {
            resetPosition();
            alert('!!');
        }
        return false;
    });
});

下面是我的控制台打印出来的内容:

代码语言:javascript
复制
items: 6 & id: 0
id: 0
-----
animSpeed: 410
-----
animDelay: 20
-----
working: 1
==============
items: 6 & id: 1
id: 0
-----
animSpeed: 410
-----
animDelay: 20
-----
working: 1
==============
items: 6 & id: 2
id: 0
-----
animSpeed: 410
-----
animDelay: 20
-----
working: 1
==============
items: 6 & id: 3
id: 0
-----
animSpeed: 410
-----
animDelay: 20
-----
working: 1
==============
items: 6 & id: 4
id: 0
-----
animSpeed: 410
-----
animDelay: 20
-----
working: 1
==============
items: 6 & id: 5
id: 0
-----
animSpeed: 410
-----
animDelay: 20
-----
working: 1
==============
items: 6 & id: 6
id: 0
-----
animSpeed: 410
-----
animDelay: 20
-----
working: 1
==============
items: 6 & id: 7
herp derp
id: 0
-----
animSpeed: 410
-----
animDelay: 20
-----
working: 1
==============
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-11 21:53:32

您在rollDown方法签名中定义了id作为参数。如果您删除它,您的全局变量将正确更新。

来自:的

代码语言:javascript
复制
function rollDown(items, id) {

To:

代码语言:javascript
复制
function rollDown(items) {

您可能还想删除items,因为它也在全局名称空间中定义。

票数 4
EN

Stack Overflow用户

发布于 2012-03-11 21:56:40

当您进入名称为id的函数变量时,例如:function rollDown(items, id),您将遍历全局变量。

使用:

代码语言:javascript
复制
function rollDown(items){
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9655488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档