1.
  var name="The widow";
   var object={
       name:"my object";
       getNameFunc:function(){
            return function(){
                 return this.name;
         };
     }
};
   alert(object.getNameFunc()());
问:为什么alert(object.getNameFunc()());中getNameFunc后是两个括号????
——————————————————————————————————————————————————————
2.function createFunctions(){
  var result=new Array();
  for(var i=0;i<10;i++){
    result[i]=function(num){
      return function(){
          return num;
        };
      }(i);//*A*
  }
   
    return result;
}
var funcs=createFunctions();
for(var i=0;i<funcs.length;i++){
  document.write(funcs[i]()+"<br/>");
}
问:为什么*A*前有个(i),我知道那个是传给内部匿名函数的参数(形参是num那个),但是为什么是在哪里而不是调用的时候传参数呢?就是为什么不是document.write(funcs[i](为什么不是在这里传参数???)+'<br/>")

解决方案 »

  1.   

    第一点.因为getNameFunc本身是一个function,执行后中返回的是一个函数,若不加括号,则返回的只是函数的内容,并没有执行此函数
    (第一点中你写法也有问题,用","分隔)
      

  2.   

    第二个问题:  result[i]=function(num){
      return function(){
      return num;
      };
      }(i)其实就是加个(i)其实就是执行定义的匿名函数。等价于function func(num){
      return function(){
        return num;
      }
    }
    result[i] = func(i);
      

  3.   

    那我想再问您一下result[i]中存的是匿名函数的声明还是匿名函数的执行?
      

  4.   

    存的是声明,执行应该是result[i]();