从函数外部替换JavaScript变量

从函数外部替换JavaScript变量,javascript,Javascript,我不确定我想做的是可能的,还是有更简单的方法来做我想做的 我有以下代码: <script> function TitleSwitch() { var counter = 0, fn = function () { var array = ['Value1','Value2','Value3']; $(document).prop('title', array[counter]); coun

我不确定我想做的是可能的,还是有更简单的方法来做我想做的

我有以下代码:

<script>
function TitleSwitch() {
    var counter = 0,
        fn = function () {
            var array = ['Value1','Value2','Value3'];
            $(document).prop('title', array[counter]);
            counter++;
            counter %= array.length;
        };
        fn();
    return fn;
}
setInterval(TitleSwitch(), 5000);
</script>
从另一个功能,在标题切换功能之外

因此,假设我有一个名为pollingDone()的函数,每次返回轮询数据时都会调用该函数,那么在TitleSwitch()已经使用setInterval运行之后,如何从pollingDone()中更改TitleSwitch()中“array”的值呢

基本上,我想做的是保持TitleSwitch运行,但只是替换使用的值


我之所以尝试这样做,是因为标题每5秒在三个值之间切换一次,而轮询脚本每10秒运行一次。因此,如果每次轮询脚本完成时都启动TitleSwitch()函数,则第三个值永远不会显示在标题中。前两个将显示,轮询脚本将运行,然后标题将重新开始。因此,我希望TitleSwitch()函数保持原样运行,只需替换它使用的值。

将其传递到构造函数中,以便您可以从外部控制访问级别

在示例中:

  • myArray
    TitleSwitch
    创建的闭包之外定义
  • 编辑其值时,下一次迭代将使用更新的内容
像这样:

函数标题开关(数组){
变量计数器=-1,
fn=函数(){
计数器++;
计数器%=数组长度;
//移动到底部以防止在使用较短数组时出错
log(数组[计数器]);
};
fn();
返回fn;
}
var myArray=['Value1','Value2','Value3'];
设置间隔(标题开关(myArray),1000);
myArray[1]=“测试”;

myArray[2]=“TEST2”将其传递到构造函数中,以便您可以从外部控制访问级别

在示例中:

  • myArray
    TitleSwitch
    创建的闭包之外定义
  • 编辑其值时,下一次迭代将使用更新的内容
像这样:

函数标题开关(数组){
变量计数器=-1,
fn=函数(){
计数器++;
计数器%=数组长度;
//移动到底部以防止在使用较短数组时出错
log(数组[计数器]);
};
fn();
返回fn;
}
var myArray=['Value1','Value2','Value3'];
设置间隔(标题开关(myArray),1000);
myArray[1]=“测试”;

myArray[2]=“TEST2”
无法替换在
fn
中定义为局部变量的
数组。如果将其拉出标题开关
,只需给它一个新值即可。或者,您可以在
fn
上使用属性,或构造更复杂的对象,以避免污染环境


您还需要将模线提升到
fn
的开头:例如,如果您有一个5元素列表,其中
计数器
4
,并且您将
数组
替换为一个2元素列表,则代码将中断。

无法替换
fn
中定义为局部变量的
数组
。如果将其拉出标题开关
,只需给它一个新值即可。或者,您可以在
fn
上使用属性,或构造更复杂的对象,以避免污染环境


您还需要将模线提升到
fn
的开头:例如,如果您有一个5元素列表,其中
计数器
4
,并且您将
数组
替换为2元素列表,您的代码将中断。

您可以通过将
fn
函数中的
数组
暴露给外部上下文来完成此操作

以下是一个例子:

函数标题开关(){
var计数器=0;
this.array=['Value1','Value2','Value3'];
var self=这个;
this.fn=函数(){
$(document.prop('title',self.array[counter]);
log(self.array[counter]);
计数器++;
计数器%=self.array.length;
};
这是fn();
}
var开关=新标题开关()
设置间隔(switcher.fn,500);
函数asyncFn(){
switcher.array[0]=“已更改标题1”;
}
设置超时(异步FN,1000)

您可以通过将
fn
函数中的
数组
暴露给外部上下文来实现这一点

以下是一个例子:

函数标题开关(){
var计数器=0;
this.array=['Value1','Value2','Value3'];
var self=这个;
this.fn=函数(){
$(document.prop('title',self.array[counter]);
log(self.array[counter]);
计数器++;
计数器%=self.array.length;
};
这是fn();
}
var开关=新标题开关()
设置间隔(switcher.fn,500);
函数asyncFn(){
switcher.array[0]=“已更改标题1”;
}
设置超时(异步FN,1000)

我认为您必须将变量从函数范围中取出,如下所示:

var titles = ['Value1', 'Value2', 'Value3'];

function TitleSwitch() {
    var counter = 0,
        fn = function () {
            $(document).prop('title', titles[counter]);
            counter++;
            counter %= titles.length;
        };
        fn();
    return fn;
}
setInterval(TitleSwitch(), 5000);

// Here, you can modify your titles in an ajax call

我认为您必须将变量从函数范围中取出,类似于这样:

var titles = ['Value1', 'Value2', 'Value3'];

function TitleSwitch() {
    var counter = 0,
        fn = function () {
            $(document).prop('title', titles[counter]);
            counter++;
            counter %= titles.length;
        };
        fn();
    return fn;
}
setInterval(TitleSwitch(), 5000);

// Here, you can modify your titles in an ajax call
var数组=['Value1','Value2','Value3'];
函数TitleSwitch(){
变量计数器=0,
fn=函数(){
$(document).prop('title',数组[计数器]);
log(数组[计数器]);
计数器++;
计数器%=数组长度;
};
fn();
返回fn;
}
设置间隔(标题开关(),5000);
函数pollingDoneCallback(数据){
如果(数据){
数组=[];
对于(var i=0;i
var数组=['Value1','Value2','Value3'];
函数TitleSwitch(){
变量计数器=0,
fn=函数(){