从函数外部替换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=函数(){