2016-09-16 114 views
1

我正在學習JS並閱讀函數可以作爲參數傳遞,只是任何其他變量。在下面的代碼,當我通過匿名函數作爲參數,它給"Uncaught SyntaxError: Unexpected token function"JS回調錯誤:未捕獲SyntaxError:意外的令牌函數

var x; 
function myfun(x, function(x) { 
    console.log("Value of x is: "+ x); 
}); 

myfun(2,4); 

我更想知道的錯誤背後的邏輯。我究竟做錯了什麼?

感謝 BT

+0

功能參數應遵循相同的語法變量名。功能的身體也在哪裏? –

+1

你有它向後。作爲第二個參數,匿名函數需要進入myfun()調用中。定義需要是:'function myfun(x,f){f(x); }' –

回答

0

在你的代碼中,你似乎試圖聲明兩個函數,一個名爲myfun,它有兩個參數,一個匿名函數(匿名函數),它接受一個參數。您的代碼中似乎有兩個語法錯誤:(1)函數myfun沒有函數體,(2)您在參數列表myfun中聲明函數。

讓我們通過聲明兩個功能第一(給第二個名稱,並給予myfun函數體)接近這個:

function myfun(x, functionToBeCalled) { 
    functionToBeCalled(x); 
} 

function functionToBePassed(x) { 
    console.log("Value of x is: "+ x); 
} 

現在,我們可以調用函數myfun並把它傳遞兩個參數,一個

myfun(2, functionToBePassed); 

如果你想在第二個功能是:對x和函數值內myfun —功能functionToBePassed被稱爲匿名過去了,聲明此功能,當您通話功能myfun,而不是當你聲明myfun

//declare myfun 
 
function myfun(x, functionToBeCalled) { 
 
    functionToBeCalled(x); 
 
} 
 

 
//call myfun and pass a function as an argument 
 
myfun(2, function(x) { 
 
    console.log("Value of x is: "+ x); 
 
});

+0

[quote]如果你希望匿名傳遞第二個函數,當你調用函數myfun而不是聲明myfun時聲明這個函數:[/ quote]這正是我想要做的,但只是讀和閱讀。只是這個說法,把許多概念放在了預期的範圍內。真棒回答 –

0

如果你想傳遞一個匿名函數作爲參數,則必須至少指定其參數名稱。所以,當這個參數是undefined,它被分配了這個函數,但是我們不能確認我們會收到一個函數,所以最好是創建一個條件。

實施例 - fnc參數的設置默認值。這是一個新的瀏覽器實現。

function myfun(x, fnc = function(x) { 
    console.log("Value of x is: " + x) 
}) 

{ 
    /* block statement is always required in a function declaration */ 
    fnc(x) 
} 

例子 - 如果b檢查是一個函數

function myfun(x, fnc) 

{ 
    typeof fnc !== 'function' && (fnc = function(x) { 
     console.log("Value of x is: " + x) 
    }) 
    fnc(x) 
} 

但是你想做的事是:

function myfun(x) { 
    console.log("Value of x is: " + x) 
} 
使用

你只需要直接聲明塊聲明{...}

相關問題