猿问

下面的JS代码会报错,请问原因?

javascriptvarx=0;
varfoo=function(callback){
returnwindow.setTimeout(callback,17);
}
(functionsayX(){
x+=1;
console.log(x);
foo(sayX);
}())
报错信息:UncaughtTypeError:fooisnotafunction
测试环境:chrome44.0.2403.130m
PS:最好能深入的说明一下原因。
SMILET
浏览 338回答 2
2回答

梦里花落0921

不是特别清楚你的意图,你是想这样:varx=0;varfoo=function(callback){returnwindow.setTimeout(callback,17);};//此处加分号(functionsayX(){x+=1;console.log(x);foo(sayX);}())还是这样:varx=0;functionfoo(callback){returnwindow.setTimeout(callback,17);}(functionsayX(){x+=1;console.log(x);foo(sayX);}())}后跟(就直接被调用了。你那样写是在给foo赋一个匿名函数的执行结果,不是在定义函数。把你那段代码拆开就变成:varx=0;varfoo;functionanonymous(callback){returnwindow.setTimeout(callback,17);};foo=anonymous(functionsayX(){x+=1;console.log(x);foo(sayX);}());当然会出错

白猪掌柜的

改成这个就可以了varx=0;functionfoo(callback){returnwindow.setTimeout(callback,17);}(functionsayX(){x+=1;console.log(x);foo(sayX);}())
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答