Javascript 如何在不创建新函数的情况下更改此函数中变量的值 功能幻灯片放映(区域){ var SlideImg=新数组('img1','img2'); var SlideArea=document.getElementById(区域); 对于(i=0;iSlideImg.length-1){ a=0; } ImgBefore=document.getElementById(SlideImg[before]); ImgBefore.className='未激活'; ImgNext=document.getElementById(SlideImg[a]); ImgNext.className='active'; a++; } var run=设置间隔(运行滑动,5000); }

Javascript 如何在不创建新函数的情况下更改此函数中变量的值 功能幻灯片放映(区域){ var SlideImg=新数组('img1','img2'); var SlideArea=document.getElementById(区域); 对于(i=0;iSlideImg.length-1){ a=0; } ImgBefore=document.getElementById(SlideImg[before]); ImgBefore.className='未激活'; ImgNext=document.getElementById(SlideImg[a]); ImgNext.className='active'; a++; } var run=设置间隔(运行滑动,5000); },javascript,javascript-events,Javascript,Javascript Events,如何更改a值?由于a变量不在全局范围内,我可以从其他函数访问它吗? 我想访问它,但不想将a变量声明为全局变量。简单,声明var a在幻灯片放映之外,然后它将被全局访问 请记住,它仍然需要在函数中用a=1重置简单,声明变量a在幻灯片放映之外,然后它将被全局访问 请记住,它仍然需要在函数中用a=1重置若您可以将变量的作用域设置为全局,那个么您应该能够。与其在函数中声明,不如在页面的“”中引用变量并声明。请参阅我的示例和我测试的示例,单击diff links会更改变量的值并显示在第页上 functio

如何更改
a
值?由于
a
变量不在全局范围内,我可以从其他函数访问它吗?
我想访问它,但不想将
a
变量声明为全局变量。

简单,声明
var a
幻灯片放映
之外,然后它将被全局访问


请记住,它仍然需要在函数中用
a=1重置

简单,声明
变量a
幻灯片放映
之外,然后它将被全局访问


请记住,它仍然需要在函数中用
a=1重置

若您可以将变量的作用域设置为全局,那个么您应该能够。与其在函数中声明,不如在页面的“”中引用变量并声明。请参阅我的示例和我测试的示例,单击diff links会更改变量的值并显示在第页上

function SlideShow(area) {
    var SlideImg = new Array('img1', 'img2');
    var SlideArea = document.getElementById(area);
    for (i = 0; i < SlideImg.length; i++) {
        if (SlideImg[i] == SlideImg[0]) {
            var classname = 'active';
        } else {
            var classname = 'not-active';
        }
        var html = '<img src="images/room/' + SlideImg[i] + '.jpg" id="' + SlideImg[i] + '" class="' + classname + '" />';
        SlideArea.innerHTML += html;
    }
    var a = 1;

    function RunSlide() {
        var before = a - 1;
        if (a > SlideImg.length - 1) {
            a = 0;
        }
        ImgBefore = document.getElementById(SlideImg[before]);
        ImgBefore.className = 'not-active';
        ImgNext = document.getElementById(SlideImg[a]);
        ImgNext.className = 'active';
        a++;
    }
    var run = setInterval(RunSlide, 5000);
}

试验
var a=-1;
函数changeVar(值){
a=数值;
document.getElementById(“test1”).innerHTML=a;
}
测试页




a的值为: 功能幻灯片(区域){ var SlideImg=新数组('img1','img2'); var SlideArea=document.getElementById(区域); 对于(i=0;iSlideImg.length-1){ a=0; } ImgBefore=document.getElementById(SlideImg[before]); ImgBefore.className='未激活'; ImgNext=document.getElementById(SlideImg[a]); ImgNext.className='active'; a++; } var run=设置间隔(运行滑动,5000); }
如果在函数中声明,则无法访问变量本身,因为它的作用域是局部的。见:

但是,有一种方法可以调整函数以设置页面上另一个元素的值,然后其他人可以引用该值。在脚本中使用相同的代码段,当更新时,可以在页面上设置隐藏字段的值,然后其他人可以引用该值。我认为您必须在函数之外声明它

备选方案1:

<html>
<head><title>Test</title>
<script language="javascript">
var a = -1;

function changeVar(value) {
  a = value;
  document.getElementById("test1").innerHTML = a;
}
</script>
</head>
<body>
<h1>Test page</h1>
<a href="#" onclick="changeVar(2);">Click me (2)</a> <br />
<a href="#" onclick="changeVar(5);">Click me (5)</a> <br />
<a href="#" onclick="changeVar(9);">Click me (9)</a> <br />
<hr>
<h1>Value for a is: <div id="test1"></div></h1>

<!-- really test by including function later on page -->
<script language="javascript">
function SlideShow(area) {
    var SlideImg = new Array('img1', 'img2');
    var SlideArea = document.getElementById(area);
    for (i = 0; i < SlideImg.length; i++) {
        if (SlideImg[i] == SlideImg[0]) {
            var classname = 'active';
        } else {
            var classname = 'not-active';
        }
        var html = '<img src="images/room/' + SlideImg[i] + '.jpg" id="' + SlideImg[i] + '" class="' + classname + '" />';
        SlideArea.innerHTML += html;
    }
    a = 1;  // removed declaration of a and just using a from prior declaration

    function RunSlide() {
        var before = a - 1;
        if (a > SlideImg.length - 1) {
            a = 0;
        }
        ImgBefore = document.getElementById(SlideImg[before]);
        ImgBefore.className = 'not-active';
        ImgNext = document.getElementById(SlideImg[a]);
        ImgNext.className = 'active';
        a++;
    }
    var run = setInterval(RunSlide, 5000);
}
</script>
</html>

功能幻灯片(区域){
var SlideImg=新数组('img1','img2');
var SlideArea=document.getElementById(区域);
对于(i=0;iSlideImg.length-1){
a=0;
}
ImgBefore=document.getElementById(SlideImg[before]);
ImgBefore.className='未激活';
ImgNext=document.getElementById(SlideImg[a]);
ImgNext.className='active';
a++;
//设置页面上元素的值,以便其他人可以引用
document.getElementById(“test1”).innerHTML=a;//或设置隐藏字段
}
var run=设置间隔(运行滑动,5000);
}

另一种方法是为函数声明一个值为a的返回,如果调用方愿意,可以忽略它,其他人可以检索它。如果您重新调用RunSlide函数,则setTimeOut可能不起作用。我在SlideShow中尝试了另一个内部函数,但似乎也没有返回一个值。最初的范围界定建议仍然存在。

若您可以将变量的范围设置为全局,那个么您应该能够。与其在函数中声明,不如在页面的“”中引用变量并声明。请参阅我的示例和我测试的示例,单击diff links会更改变量的值并显示在第页上

function SlideShow(area) {
    var SlideImg = new Array('img1', 'img2');
    var SlideArea = document.getElementById(area);
    for (i = 0; i < SlideImg.length; i++) {
        if (SlideImg[i] == SlideImg[0]) {
            var classname = 'active';
        } else {
            var classname = 'not-active';
        }
        var html = '<img src="images/room/' + SlideImg[i] + '.jpg" id="' + SlideImg[i] + '" class="' + classname + '" />';
        SlideArea.innerHTML += html;
    }
    var a = 1;

    function RunSlide() {
        var before = a - 1;
        if (a > SlideImg.length - 1) {
            a = 0;
        }
        ImgBefore = document.getElementById(SlideImg[before]);
        ImgBefore.className = 'not-active';
        ImgNext = document.getElementById(SlideImg[a]);
        ImgNext.className = 'active';
        a++;
    }
    var run = setInterval(RunSlide, 5000);
}

试验
var a=-1;
函数changeVar(值){
a=数值;
document.getElementById(“test1”).innerHTML=a;
}
测试页




a的值为: 功能幻灯片(区域){ var SlideImg=新数组('img1','img2'); var SlideArea=document.getElementById(区域); 对于(i=0;iSlideImg.length-1){ a=0; } ImgBefore=document.getElementById(SlideImg[before]); ImgBefore.className='未激活'; ImgNext=document.getElementById(SlideImg[a]); ImgNext.className='active';
function SlideShow(area) {
  ...
  return function(value){ a = value; };
}
var setA = SlideShow(something);
setA(42);