<script language="javascript" type="text/javascript">
function f( x )
{
    var e = function()
    {
        return x;
    }
    return function()
    {
        return e;
    }
}
var f = f( 5 );
var a = f();
var b = f();
alert( a === b )
</script>返回值是true,但是下面两个程序的返回值就不好理解了。<script language="javascript" type="text/javascript">
function f( x )
{
    var e = function()
    {
        return x;
    }
    return function()
    {
        return e;
    }
}var a = f(5)();
var b = f(5)();
alert( a === b )
</script>这个程序的返回值是false,而下面这个的返回值是true?why?<script language="javascript" type="text/javascript">
var f = function( x )
{
    var e = function()
    {
        return x;
    }
    return function()
    {
        return e;
    }
}
( 5 );
var a = f();
var b = f();
alert( a === b )
</script>

解决方案 »

  1.   


    var a = f(5)();
    var b = f(5)(); 这俩是什么玩意?有意义吗
      

  2.   

    var a = f(5)();
    var b = f(5)();
    alert( a === b )返回的这俩函数内存地址不同吧
      

  3.   

    中间代码返回false是因为两次调用f()函数,会生成两个局部变量e,两个不是同一个变量,而f()的返回值和e有关系所以两次执行f(5)()返回值不同;可以把e定义为全局变量,在函数中不要修改e的值,这时候就是true了。
    最后一段代码定义了一个f变量(指向一个函数),后边加括号表示执行函数,参数是5,所以变量f再次执行(因为f是一个指向函数的变量,在后边加括号表示执行)返回值相同。
    开头的代码和最后是一个意思,执行后赋给一个变量f,所以f再次执行返回值相同。
      

  4.   

    第一段程序返回true,是因为最后的结果是a=5,b=5;所以a==b;第2段程序返回false,等同于下面:var a = function(){return 5};var b= function(){return 5}
    虽然长得一模一样,但他们之间没有任何的关系;第3段程序应该会返回true,等同于var f= function(){return 5};var a=f();var b=f();即a=5,b=5.所以会返回true
      

  5.   

    这是错的, a, b并不是int, 而是function function f( x )
    {
    var e = function()
    {
    return x;
    }

    return function()
    {
    return e;
    }

    }
    //code1
    var f1 = f( 5 );
    /*
    这里的f1是个这样的结构:
    function(){
    function(){
    return 5;
    }
    }
    */

    var a1 = f1(); 
    var b1 = f1();
    /*
    a1, b1为
    function(){
    return 5;
    }
    */
    alert( a1 === b1 )
    /*
    因为a1, b1指向的f1()的内存是确定的(因为f1只有一个), 所以他们是等同的
    */

    //code2
    var a2 = f(5)();
    var b2 = f(5)();
    /*
    a2, b2为
    function(){
    return 5;
    }
    */
    alert( a2 === b2 );
    /*
    在var的时候, f()没运行一次, 实际上new了一次内部的function, 内存地址指向不同
    就相当于var a = function(){return 5;} var b = function(){return 5;}
    alert(a === b)虽然功能相同, 但是内存地址指向不同
    */

    //code3
    /*
    不说了
    (f(){})(5) 与 var x = f(5) 一样的原理, 只执行了一次, 内存地址指向相同
    */
      

  6.   

    var f = f(5);
    a = f(); //a()==5 而不是 a==5