如何传递“全局变量”

Leo2048 2012-05-21 04:45:03

function myFunction() {
if (typeof value1 != "undefined") {//没有这一句,value1好像会有不同的整数值。
return;
}
var i = 0;
value1 = setInterval(function () {
if (i == 0) {
//function1
i++;
}
else {
//function2
i--;
}
}, 1000);
}
function clear_myFunction() {
if (typeof value1 == "undefined") {
return;
}
clearInterval(value1);
delete value1;
}
//value1没有预先定义
//现在我要执行几十次myFunction,代码里面不同的地方只有value1,value2,value3,……
//如何把一个没有定义的变量传到myFunction里面,让它成为全局变量
//clear_myFunction也能根据参数删除定时器的全局变量

请问如何封装这个函数?
...全文
200 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Leo2048 2012-05-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

1楼 用定义为一个类的方法,是正解

如果不明白面向对象的方式,还有种方法,把定时器作为局部变量,执行函数时将其存入一个全局数组,clear_myFunction删除全局数组中所有保存的定时器,就ok了。

var vals=new Array();
function myFunction() {
//if (typeof value1 != "undefined") {
……
[/Quote]

MyClass.prototype.myFun = function(val){//我需要把val传进来
var i = 0;
MyClass.val = setInterval(function () {
if (i == 0) {
//your funciton
i++;
}
else {
//your funciton
i--;
}
}
//能不能这样调用myFun?
var myInstance = new MyClass();
myInstance.myFun(val1);
myInstance.myFun(val2);
myInstance.myFun(val3);
//能不能这样调用clearFun?
myInstance.clearFun(val1);
myInstance.clearFun(val2);
myInstance.clearFun(val3);
未知数 2012-05-22
  • 打赏
  • 举报
回复
1楼 用定义为一个类的方法,是正解

如果不明白面向对象的方式,还有种方法,把定时器作为局部变量,执行函数时将其存入一个全局数组,clear_myFunction删除全局数组中所有保存的定时器,就ok了。

var vals=new Array();
function myFunction() {
//if (typeof value1 != "undefined") {
// return;
//}
var i = 0;
var value1 = setInterval(function () {
if (i == 0) {
//function1
i++;
}
else {
//function2
i--;
}
}, 1000);
vals.push(value1);}
function clear_myFunction() {
//if (typeof value1 == "undefined") {
// return;
// }
for(var i=0;i<=vals.length-1;i++)
{
clearInterval(vals[i]);
}
}
Leo2048 2012-05-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

JScript code

var MyClass = function(){
this.val = 0;
}

MyClass.prototype.myFun = function(){
var i = 0;
this.val = setInterval(function () {
if (i == 0) {
//your fu……
[/Quote]

谢谢了!!
猿敲月下码 2012-05-22
  • 打赏
  • 举报
回复
楼上可以,每一个new出来的对象内部都有一个属于自己的val,因此不需要传值的
var myInstance1 = new MyClass();
myInstance1.myFun();// 运行
myInstance1.clearFun();// 清除
丰常青 2012-05-22
  • 打赏
  • 举报
回复

var MyClass = function(){
this.val = 0;
}

MyClass.prototype.myFun = function(){
var i = 0;
this.val = setInterval(function () {
if (i == 0) {
//your funciton
i++;
}
else {
//your funciton
i--;
}
}, 1000);
}

MyClass.prototype.clearFun = function(){
clearInterval(this.val);
}

window.onload = function(){
//1. 需要实例化
var myInstance1 = new MyClass();
var myInstance2 = new MyClass();
var myInstance3 = new MyClass();
var myInstance4 = new MyClass();
.
.
//这样就可以了啊,和C#的面向对象思想一样的。
// MyClass = {.....} 这种方式不行,因为MyClass.val 相当于是static field,
// 是和类相关的,而不是和实例相关的。

}
丰常青 2012-05-21
  • 打赏
  • 举报
回复
<html>
<body>
<div>
</div>
<script type="text/javascript">

var MyClass = function(){}

MyClass.prototype.myFun = function(){
alert(this.val);
var i = 0;
MyClass.val = setInterval(function () {
if (i == 0) {
//your funciton
i++;
}
else {
//your funciton
i--;
}
//for test
document.getElementById("lblMsg").innerHTML = i;
}, 1000);
}

MyClass.prototype.clearFun = function(){
alert(MyClass.val);
clearInterval(MyClass.val);
}

/*static method*/
var myClass = {
myFunction: function(){
var i = 0;
alert(i);
myClass.val = setInterval(function () {
if (i == 0) {
//your funciton
i++;
}
else {
//your funciton
i--;
}
//for test
document.getElementById("lblMsg").innerHTML = i;
}, 1000);
},
clearFun: function(){
clearInterval(myClass.val);
}
}

window.onload = function(){
//1. 需要实例化
var myInstance = new MyClass();
myInstance.myFun();
btn.onclick = myInstance.clearFun;

//2. 类似于静态方法
//myClass.myFunction();
//btn.onclick = myClass.clearFun;
}
</script>
<a href="#" id="lblMsg">for test</a><br/>
<input type="button" id="btn" value="stop" />
</body>
</html>

87,921

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧