<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>
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>
var a = f(5)();
var b = f(5)(); 这俩是什么玩意?有意义吗
var b = f(5)();
alert( a === b )返回的这俩函数内存地址不同吧
最后一段代码定义了一个f变量(指向一个函数),后边加括号表示执行函数,参数是5,所以变量f再次执行(因为f是一个指向函数的变量,在后边加括号表示执行)返回值相同。
开头的代码和最后是一个意思,执行后赋给一个变量f,所以f再次执行返回值相同。
虽然长得一模一样,但他们之间没有任何的关系;第3段程序应该会返回true,等同于var f= function(){return 5};var a=f();var b=f();即a=5,b=5.所以会返回true
{
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) 一样的原理, 只执行了一次, 内存地址指向相同
*/
a = f(); //a()==5 而不是 a==5