2016-03-01 88 views
1

我想創建一個函數「when」,它將作爲普通命令或只是一個函數,並且能夠重新評估其參數。 例如:Javascript - 再次評估參數

when(k==0) { 
    do something; 
} 

when(k==0, function() { 
    do something; 
}); 

事情是,中K現在是例如等於1,並且這個功能需要總是滿足K == 0重新評估以確定的,如果它改爲0.

*我不想發送k == 0作爲字符串'k == 0'。

這可能嗎?如果是這樣,怎麼樣?

*這是一個學術問題,請不要解釋爲什麼創建這個函數是非常錯誤的。

+2

我覺得這個函數已經存在了,叫做「if」。像'if(k == 0){do sth。 }'。 – migg

+0

您似乎在尋找某種機制來觀察變量值何時發生變化。 JS中沒有這樣的東西。 – 2016-03-01 07:25:00

+0

@migg「if」對條件進行一次評估,並將其刪除。我想到的東西永遠都在運行,並且總是在進行評估。 – Amit

回答

1

什麼工作將是使用lambda的條件和行動。使用箭頭函數表達式(謝謝@Kyll),它甚至相當緊湊。

when (() => k == 0,() => { do something; }); 
+0

用箭頭功能看起來會更好! (()=>條件,行動)' –

+0

我的JS-fu最好生鏽。剛剛添加了一個答案,因爲它看起來像我的評論是足夠的OP。應該首先查看它,但其他評論/答案都不使用函數表達式以外的任何其他評論/答案。將編輯答案。 – Zastai

3

這樣的事情?

function when(condition, callback){ if (condition) callback() } 

和閱讀上述

評論某種機制爲,當一個變量的值發生變化

變化when方法來觀察後調用它

var a = 0; 
when(a == 0, function(){ console.log("yeyyyy") }); 

function when(lhs, operator, rhs, callback) 
{ 
    var result = false; 
    switch(operator) 
    { 
     case "==": result = (lhs==rhs); break; 
     case "===": result = (lhs===rhs); break; 
     case "<": result = (lhs<rhs); break; 
     case ">": result = (lhs>rhs); break; 
     case "<=": result = (lhs<=rhs); break; 
     case ">=": result = (lhs>=rhs); break; 
     default: result = true; 
    } 
    if (result) { callback() } 
    else { setTimeout(function(){ when(lhs, operator, rhs, callback) }, 1000); } 
} 
+0

不正確..當你發送一個== 0到函數,在這種情況下它發送「true」。如果可能,我想發送實際條件,然後在函數內對其進行評估。 「when」是一個具有1毫秒超時的函數,每1毫秒檢查一個== 0。如果它是真的,現在它將運行回調函數,並停止超時。 – Amit

+0

@在閱讀完上述評論後,我認爲您需要在方法本身中構建一個表達式。爲此,您需要將所有三項都傳遞給(lhs,rhs和operator)。現在檢查更新的代碼。 – gurvinder372