为什么
var spo = function(){
var qq = function(){};
}
抛出错误undefined不是
时的函数var spo = function(){
function qq(){};
}
没有?
更详细的示例抛出了确切的错误:TypeError:undefined不是函数
在Ubuntu上编译的节点版本v0.6.10
spo = function(car){
var q = 10;
var s = 'fraggle';
var qq = function(){
console.log(s);
}
(function(){
while(q){
console.log(q);
q--;
}
qq.call();
car.call();
})();
};
spo(function(){console.log('as intended');});
答案 0 :(得分:2)
在此qq
中动态分配函数。
var spo = function(){
// qq is undefined here
var qq = function(){};
// qq is defined here
}
另一方面,在这种情况下,qq被定义为在spo
var spo = function(){
// qq is defined here
function qq(){};
// qq is defined here also
}
编辑: 在您更新的代码中,实际问题是可见的,在函数后没有半冒号导致错误的语句,如下所示
var qq = function(){}()(); // This is causing TypeError
在功能后放置一个半冒号。
var qq = function(){
console.log(s);
}; // you missed this semi colon
(function(){
while(q){
console.log(q);
q--;
}
qq.call();
car.call();
})();
答案 1 :(得分:0)
在定义qq
后,您需要一个分号。引擎试图用括号中的匿名函数的参数执行调用qq
函数的结果 - 如果很难看到,想象一下删除分隔qq
定义的新行和空格自动执行功能。
var qq = function() {
}(function() {})();
答案 2 :(得分:-3)
尝试更改
qq.call();
到
qq();
由于qq
只是一个函数,因此不是方法call
的“对象”。