[英]Why is callback function executed first in javascript?
在下面的示例中。 lname是fname函數內部的回調函數。 執行時,第一個輸出是史密斯和比利。 據我了解,一旦fname函數完成執行,則應執行回調函數lname 。 為什么這里錯了?
function fname(){ console.log("Billy");} function lname(){ console.log("Smith");} fname(lname());
函數的參數在調用之前先求值。 因此, fname(lname())
導致調用lname
,然后調用fname
。 lname
的結果作為第一個參數傳遞給fname
,但被調用的函數不使用。
在下面的示例中。
lname
是fname
函數內部的回調函數。
不它不是。 您正在調用 lname
(因為添加了括號),並將其調用結果(碰巧是undefined
,就像函數在沒有顯式return
值的情況下一樣)傳遞給fname
。 就像Math.floor(Math.sqrt(10))
-這里沒有回調。 fname(lname())
和fname(lname)
之間有很大的區別:后者將一個函數本身傳遞給另一個函數; 實際上,如果我們將其稱為“回調”,則將其稱為“回調”。
據我了解,一旦
fname
函數完成執行,則應執行回調函數lname
。
再說一次 回調在被調用時就執行了,不多也不少。 例如:
function printsSomething() { console.log("Something"); } function invokesCallbackAtEnd(callback) { console.log("invokesCallbackAtEnd doing something"); callback(); } function invokesCallbackAtStart(callback) { callback(); console.log("invokesCallbackAtStart doing something"); } function invokesCallbackAtStartAndEnd(callback) { callback(); console.log("invokesCallbackAtStartAndEnd doing something"); callback(); } function invokesCallbackNever(callback) { console.log("invokesCallbackNever doing something"); } invokesCallbackAtEnd(printsSomething); console.log("---"); invokesCallbackAtStart(printsSomething); console.log("---"); invokesCallbackAtStartAndEnd(printsSomething); console.log("---"); invokesCallbackNever(printsSomething); console.log("---");
您沒有這樣定義回調函數,您必須將引用傳遞給函數,而不是函數調用本身。 即fname(lname);
而且您必須將function fname
更改為
function fname (cb) {
console.log("Billy");
cb && cb.apply(this);
}
您沒有將lname
作為回調函數傳遞。 您剛剛調用了lname
函數,並傳遞了其undefined
返回值。
即使傳遞了回調函數,其執行點也取決於代碼。
function fname(func) { func("Foo"); console.log("Billy"); func("Bar"); } function lname() { console.log("Smith"); return function (arg) { console.log(arg); } } fname(lname());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.