簡體   English   中英

JS回調錯誤:未捕獲的SyntaxError:意外的令牌功能

[英]JS callback error: Uncaught SyntaxError: Unexpected token function

我正在學習JS並讀取函數可以作為參數傳遞給任何其他變量。 在下面的代碼中,當我將匿名函數作為參數傳遞時,它會給出"Uncaught SyntaxError: Unexpected token function"

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

myfun(2,4);

我更了解錯誤背后的邏輯。 我究竟做錯了什么?

謝謝bt

如果要將匿名函數作為參數傳遞,則必須至少指定其參數名稱。 因此,當此參數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)
}

您只需要使用{...}直接聲明塊語句。

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

讓我們通過首先聲明兩個函數(給第二個名稱並給myfun一個函數體)來解決這個問題:

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

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

現在,我們可以調用函數myfun並傳遞兩個參數,一個x的值和一個在myfun中調用的functionToBePassed - 函數functionToBePassed

myfun(2, 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 ); }); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM