Uncaught SyntaxError:意外的令牌函数

JS callback error: Uncaught SyntaxError: Unexpected token function

本文关键字:令牌 函数 意外 SyntaxError Uncaught      更新时间:2023-09-26

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

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

我对知道错误背后的逻辑更感兴趣。我做错了什么?

谢谢bt

在您的代码中,您似乎试图声明两个函数,一个名为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:

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 );
});

如果你想传递一个匿名函数作为参数,你必须至少指定它的参数名。因此,当该参数为 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)
}

您只需要使用 {...} 直接声明块语句。