首页 新闻 会员 周边 捐助

为什么这个函数需要赋值给一个变量,才弹出值

0
悬赏园豆:10 [待解决问题]
 1 //我要弹出4,
 2 function func1(){
 3     return function(x){return x+1}    
 4 }
 5 
 6 alert(func1(3))   //结果是:function(x){return x+1}
 7 
 8 //但是将 func1()赋值给一个变量,就可弹出4
 9 function func1(){
10     return function(x){return x+1}    
11 }
12 var get=func1();
13 alert(get(3))  //4
14 
15 
16 为什么要先将 func1()赋值给一个变量,才可弹出4,各位帮忙解惑一下,谢谢
wstpa的主页 wstpa | 初学一级 | 园豆:151
提问于:2014-12-06 11:58
< >
分享
所有回答(3)
0

鉴于楼主比较坑,代码前面还加了行号,所以我弄了一段没有行号的。

<html>
<header>
<script language="javascript">
function func1(){
      return function(x){return x+1}    
}
alert(func1()(3))   //结果是:4

//但是将 func1()赋值给一个变量,就可弹出4
function func1(){
    return function(x){return x+1}    
}
var get=func1();
alert(get(3));  //4
</script>
</header>
<body>
</body>
</html>

你自己看着办吧。

爱编程的大叔 | 园豆:30844 (高人七级) | 2014-12-06 12:11

谢谢啊,加了行号不好意思啊,为了看着方便。

alert(func1()(3)) //结果是:4

这个意思是说,让func1()执行会返回function(x){return x+1},然后(3)就是赋给X了吗?

 

支持(0) 反对(0) wstpa | 园豆:151 (初学一级) | 2014-12-06 12:16

@wstpa: 

<html>
<header>
<script language="javascript">
function func2(x){
      return x+1;
}
alert(func2(3))   //结果是:4

//但是将 func1()赋值给一个变量,就可弹出4
function func1(){
    return function(x){return x+1}    
}
var get=func1();
alert(get(3));  //4
</script>
</header>
<body>
</body>
</html>

你自己比较一下吧,你那个Function比较坑,不是一个直接的函数,而是函数的指针。(差不多是这个意思,可能不同语言里面的表达不同吧)

有点象以前C语言里面的指针的指针的指针....专门用来坑人不偿命的...

支持(0) 反对(0) 爱编程的大叔 | 园豆:30844 (高人七级) | 2014-12-06 12:19

@爱编程的大叔: 大概懂了,谢谢你。我现在得先去查资料弄懂函数的指针去了,,没弄懂,在请教你啊,谢谢了

支持(0) 反对(0) wstpa | 园豆:151 (初学一级) | 2014-12-06 12:34
0

因为你fun1函数返回值也是一个函数,你返回一个函数当然不会自动执行了,赋值之后,变量get是内部那个函数,你再调用get(3),当然就有效了。

可以简化为:fun1()(3)。。

幻天芒 | 园豆:37207 (高人七级) | 2014-12-06 12:25

懂了,谢谢你

支持(0) 反对(0) wstpa | 园豆:151 (初学一级) | 2014-12-06 12:31
0

你的方法里面又嵌套一个方法,所以只有调用2次才会出现结果:4

var get=func1(); // 调用返回方法里嵌套的方法体

alert(get(3));      // 执行嵌套的方法体

方法定义你可以这样

1) function Add(x,y) {

  return x+y;

}

2) var Add = function(x,y) {

  return x+y;

}

大志若愚 | 园豆:2138 (老鸟四级) | 2014-12-08 18:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册