2016-04-21 30 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