我正在学习JS并且读取函数可以作为参数传递给任何其他变量。在下面的代码中,当我将匿名函数作为参数传递时,它会给出"Uncaught SyntaxError: Unexpected token function"
var x;
function myfun(x, function(x) {
console.log("Value of x is: "+ x );
});
myfun(2,4);
我更了解错误背后的逻辑。我究竟做错了什么?
由于 BT
答案 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