JavaScript嵌套函数

JavaScript嵌套函数,javascript,closures,Javascript,Closures,为什么 var spo = function(){ var qq = function(){}; } 在以下情况下,抛出未定义的错误不是函数 var spo = function(){ function qq(){}; } 不是吗 更详细的示例抛出确切的错误:TypeError:undefined不是函数 在Ubuntu上编译的节点版本v0.6.10 spo = function(car){ var q = 10; var s = 'fragg

为什么

var spo = function(){
   var qq = function(){};
}
在以下情况下,抛出未定义的错误不是函数

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

在此
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();
})();
var qq = function() {
}(function() {})();
试着改变

qq.call(); 


由于
qq
只是一个函数,因此不是方法
调用的“对象”

在定义
qq
后需要一个分号。引擎正在尝试执行调用
qq
函数的结果,括号中包含匿名函数的参数-如果很难看到,请想象删除分隔
qq
定义和自执行函数的换行符和空格

var qq = function(){
    console.log(s);
};  // you missed this semi colon

(function(){

     while(q){
         console.log(q);
         q--;
     }
     qq.call();
     car.call();
})();
var qq = function() {
}(function() {})();

在哪个浏览器中?你怎么打电话给qq?不知道你的意思。您能提供这样的代码来显示未定义的错误何时发生以及何时不发生吗?不知道您的函数实际上在做什么。。。在第一种情况下,函数被计算并分配给qq。在第二种情况下,qq从来没有真正被调用过——它只是被定义了。对我来说也是有效的。请详细说明我使用的是NODEJS v8的某些版本,让我确保我没有做错其他事情。我只是对我的问题提出了一个超级通用的版本。让我了解更多信息。我甚至可能发现了一只真正的虫子!我想你已经猜到OP想要什么了。他回答了一个很好的问题,但是我发现var qq=函数出现了错误,我认为我现在不应该这样。我应该玩什么彩票号码?实际上,在Javascript中,函数是带有方法的对象。但是,这里不需要
.call()
,这是正确的。可以说Javascript没有对象的概念-请参阅