JS回调错误:未捕获的SyntaxError:意外的令牌功能

时间:2016-09-16 10:01:02

标签: javascript callback

我正在学习JS并且读取函数可以作为参数传递给任何其他变量。在下面的代码中,当我将匿名函数作为参数传递时,它会给出"Uncaught SyntaxError: Unexpected token function"

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

myfun(2,4);

我更了解错误背后的逻辑。我究竟做错了什么?

由于 BT

2 个答案:

答案 0 :(得分: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)
}

您只需要使用 {...} 直接声明阻止声明。

答案 1 :(得分:0)

在你的代码中,你似乎试图声明两个函数,一个名为ls -1v,一个接受两个参数,一个未命名(匿名)函数,它接受一个参数。您的代码中似乎存在两个语法错误:(1)函数myfun没有函数体,(2)您在myfun的参数列表中声明了一个函数。

让我们通过首先声明两个函数(给第二个函数命名并给myfun一个函数体)来解决这个问题:

myfun

现在,我们可以调用函数function myfun(x, functionToBeCalled) { functionToBeCalled(x); } function functionToBePassed(x) { console.log("Value of x is: "+ x ); } 并传递两个参数,一个myfun的值和一个在x内调用的函数 - 函数myfun

functionToBePassed

如果您希望匿名传递第二个函数,请在调用函数myfun(2, functionToBePassed); 时声明此函数,而不是在声明 {{1}时}:



myfun