JavaScript新人,在看图灵丛书的《精通JavaScript》
闭包这里有个问题求解
function addGenerator(num){
    return function(toAdd){
     return num + toAdd;
    }
}
    
var addFive = addGenerator(5);
    
function check(){
    alert(addFive(4) == 9);
    alert(addFive);
}在页面上点击按钮执行check()
第一个alert为true,理解
第二个alert的内容为什么是function(toAdd){return num + toAdd;}
而不是function(toAdd){return 5 + toAdd;}呢?

解决方案 »

  1.   

    第二个alert的内容为什么是function(toAdd){return num + toAdd;}alert()因为你把函数addFive放在alert会默认调用toString()方法~·
    弹出的就是addFive函数代码结构~·addFive = addGenerator//addFive引用addGenerator函数 
    所以弹出addGenerator函数内部结构
      

  2.   

    闭包中addFive的num保存的是5没错.
    但是他是以变量的形式保存的.
    所以alert出来的还是函数体中的标识num
      

  3.   

    var addFive = addGenerator(5); // addFive 是匿名函数的引用,即函数名!function addGenerator(num){ 
        return function(toAdd){ 
    return num + toAdd; 
        } 

        
    var addFive = addGenerator(5); 
        
    function check(){ 
        alert(addFive(4) == 9); 
        alert(addFive);
    alert(typeof(addFive)); // function
    }check();
      

  4.   

    楼主你只要记住在JS中只有当函数在执行时解释器才会找函数内部的变量并且给它赋值。
    你仅仅只是alert(addFive),而addFive是内部函数的引用,并没有执行,所以肯定
    会弹出内部函数的源代码:
    比如:function addFive(){-------;}
    你上面那alert(addFive)就等于弹出我定义的这个方法一样。
      

  5.   

    问个初级问题:addFive(4),这里的参数 4 , 就是 内部函数 参数 的 toAdd ,是默认这样的吗?还有有道理可讲?谢谢
      

  6.   

    addFive 是 return function(toAdd) 那个返回函数的引用。addFive(4) ,这个 4 就是 toAdd 啊!明白过来了。