2016-04-21 69 views
0

只是快速的问题,有没有办法调用一个函数并同时修改一个变量? 借此,<button onclick="change(); var con = true">click me</button>在JavaScript中同时调用函数和修改变量

<script> 
function change() { 
while (con == true) { 
var x = event.clientX; 
var y = event.clientY; 
} 
//do some more magical stuff 
} 
</script> 

基本上我想循环只有在条件为真while循环,并在同一时间做一些更神奇的东西,那会是可能的吗?

+2

您当前的功能将锁住浏览器,是你确定你真的想要这种循环? –

+0

你的代码在哪里做'con === false'?就像保罗所说,这是一个无限循环。 – Andy

+0

有一个事件,我没有提到,onmouseup =“var con = false”,工作正常我只是想让它循环,而条件为真 – user6234002

回答

0

使用whilefor所示的示例代码调用时,将锁定客户端的浏览器。请考虑使用回调式的方式,例如setTimeout

例使用setTimeout包裹函数,返回一个切换功能与

function toggleableFn(fn, rate) { 
    let timeout, 
     run = false, 
     loop; 
    function looper(args) { 
     if (!run) return; // double safety 
     fn.apply(this, args); 
     timeout = window.setTimeout(loop, rate); 
    } 
    return (...args) => { 
     run = !run; 
     if (run) { 
      loop = looper.bind(this, args); 
      loop(); 
      return true 
     } 
     else { 
      window.clearTimeout(timeout); 
     } 
     return false; 
    }; 
} 

var rep = toggleableFn((x, y) => console.log(x, y), 1e3); 
rep('foo', 'bar'); // true 
// logs "foo" "bar" every second until you toggle with `rep(); // false` 
+0

哇!谢谢,这真是太棒了 – user6234002

2

试试这个

<button onclick="window.con = true; change();">click me</button> 
<script> 
    window.con = false; 
    function change() { 
     while (window.con == true) { 
      var x = event.clientX; 
      var y = event.clientY; 

      // Put some logic here to break the loop. 
     } 
     //do some more magical stuff 
    } 
</script> 
+0

感谢您的支持。 – user6234002

-1

我不推荐这种做法。不是说它不好,但为了让所有的代码都在正确的位置,我将definitelly将所有代码放在函数中。

和 - 没有进攻 - 这个编码practisies有点“老派”,努力学习,例如jQuery和所有的东西会希望更清楚,然后

+0

jQuery并没有解决所有的JS问题。对于你正在谈论的一个简单的'addEventListener'就能做到这一点。是不是jQuery本身有点老派 - 它比5年前的年龄要长,这在人类年代就是120年。 – Andy

+0

:)不,我不是在谈论自己的jQuery,而是关于例如jQuery使用的编码方法。而且因为jQuery可能是最知名的并且是网络文档选项,我选择推荐它。并且习惯那些方法OP可以进一步移动到任何选项和他们在那里的可能性...... –

+0

*“不是说它不好”* - 实际上它是*不*因为它不工作: OP的方法创建了一个无限循环,因为Javascript是单线程的,所以在循环运行时,循环条件不能被另一个事件处理程序改变。 – nnnnnn