自己测试eval
var s = 'var fn=function test(){return 1;}';
function demo2(){
          eval(s);
  return fn;
}
var fn = demo2();
alert(fn())
弹出来的是1
而像这样
var s = 'function test(){return 1;}';
function demo2() {
return eval(s);

}
var fn = demo2();
alert(fn());
提示是fn不是一个function,这是怎么回事

解决方案 »

  1.   

    var fn = demo2才是方法;
    var fn = demo2();是调用demo2方法并将返回值付给fn
      

  2.   

    var s = 'function test(){return 1;}';
    应该是 var s = 'function(){return 1;}';
      

  3.   

    var s = 'function(){return 1;}';
    function demo2() {
    return eval(s);}
    var fn = demo2();
    alert(fn());
      

  4.   

    var s = 'function test(){return 1;}';
    function demo2() {
      return eval(s);
    }
    等价于
    function demo2() {
      function test(){return 1;}
    }
    等价于
    function demo2() {
      test: function() { return 1;}
    }就不需要多说了
      

  5.   

    自己测试eval
    var s = 'var fn=function test(){return 1;}';
    function demo2(){
              eval(s);
      return fn;
    }
    var fn = demo2();
    alert(fn())
    弹出来的是1
    第一种:因为var fn=function test(){return 1;},所以可以把fn看成是方法,alert(fn())这样写没有问题。
    而像这样
    var s = 'function test(){return 1;}';
    function demo2() {
    return eval(s);}
    var fn = demo2();
    alert(fn());
    提示是fn不是一个function,这是怎么回事
    第二种:function test(){return 1;}这样写没有想第一种那样把fn声明为一份方法,var fn = demo2();而这句话只是说把方法demo2()返回的值赋给fn,所以fn在这个地方只是个变量,不是个方法。
      

  6.   

    等价于
     function demo2() {
       function test(){return 1;}
     } function demo2() {
       var fn=function test(){return 1;}
     }
    区别
      

  7.   

    重点是var s = 'var fn=function test(){return 1;}';