JavaScript大師!我意識到這個問題的標題可能有點混亂。但我不知道如何解釋它。如何判斷一個函數是否作爲另一個函數的參數被調用?
所以讓我只舉一個例子:
function foo(txt){
return "Hello " + txt);
}
function bar(txt){
if(/* bar is called as an argument */) return txt;
if(/* bar is called normally */) return "Bar";
}
foo(bar("world!")); //Returns "Hello World";
bar("world!"); //Returns "Bar";
我想吧()做一些不同的東西,如果它被稱爲比,如果它被稱爲它自己的另一個函數的參數。 (bar(「world!」));如果它是另一個函數中的參數或者不是,因爲它似乎當瀏覽器運行foo(bar(「world!」))時,我似乎無法找到任何方式讓bar()它首先運行bar(「world!」),然後給出foo(),這是bar()的結果。
我以爲我可以檢查bar()的調用堆棧,因爲我認爲foo()正在調用它。但它被foo()調用之前調用foo()的相同函數調用。
我開始覺得這是不可能的。
編輯: 所以很明顯大多數人,爲什麼我會想這樣做有點困惑。
我正在使自己成爲一個快速構建HTML元素的函數。 我可以調用函數,只是傳遞我希望他們能夠連接到父元素和一堆標籤名稱的,它創造這些標籤,並將它們附加到父元素
obj = c(tableElement,"td","td","td")
這將創建3個細胞將它們附加到我的桌子上。但不會返回任何東西。因此:
obj = undefined
監守,但如果我改變原始代碼這個沒關係:
obj = c(tableElement,"td","td",true,"td")
那麼它會做同樣的事情。而是將第二個單元格傳遞給obj,以便稍後再次使用該單元格。
它來派上用場,當我想使用Javascript來建立一堆東西,其中大部分我不需要操縱事後。
它一切正常,直到我開始添加嵌套元素的能力。 EX:
obj = c(tableElement,"tr",c("td",true,"td",true,"td",true),"tr",true)
這實際上運作良好輸出:
<table>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr></tr>
</table>
和OBJ =只有第二行元素。
現在我試圖完成所有這一切的技巧。我不想在我的嵌套c()函數中需要TRUE參數。它們不是必需的,因爲無論如何它們都是必需的。如果我有某種方式知道它是嵌套的。那麼我可以忽略TRUE參數,我的代碼會更加簡潔。
我也希望能夠讓其中一個嵌套單元格能夠返回到obj變量。
我在想我唯一的選擇是創建第二個函數,它的作用與嵌入元素的創建者有點不同。
但是你沒有傳遞一個函數作爲參數,你調用該函數並傳遞返回的字符串作爲參數,這就是添加括號所做的事情,將函數作爲參數傳遞,你必須做'富(酒吧);' – adeneo 2014-12-02 23:48:59
我不知道你爲什麼要這樣做。 – soktinpk 2014-12-02 23:50:34
我想我現在就明白了,不行,你不能這樣做,bar'函數不知道它是以什麼方式與你調用函數foo相關的。 – adeneo 2014-12-02 23:52:20