首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >返回函数的函数

返回函数的函数
EN

Stack Overflow用户
提问于 2011-10-03 07:20:08
回答 10查看 262.2K关注 0票数 128

我坚持“返回函数的函数”这个概念。我指的是Stoyan Stefanov的书“面向对象的Javascript”。

代码片段一:

代码语言:javascript
复制
    function a() {
      
        alert('A!');
    
        function b(){
            alert('B!'); 
        }
    
        return b();
    }
    
    var s = a();
    alert('break');
    s();

输出:

代码语言:javascript
复制
A!
B!
break

代码片段两个

代码语言:javascript
复制
function a() {
  
    alert('A!');

    function b(){
        alert('B!'); 
    }

    return b;
}

var s = a();
alert('break');
s();

输出:

代码语言:javascript
复制
A!
break
B!

有人能告诉我在上面的代码片段中返回bb()的区别吗?

EN

回答 10

Stack Overflow用户

发布于 2011-10-03 07:44:01

将变量赋给函数(不带括号)会复制对该函数的引用。将括号放在函数名的末尾,调用函数,返回函数返回值。

Demo

代码语言:javascript
复制
function a() {
  alert('A');
}
//alerts 'A', returns undefined

function b() {
  alert('B');
  return a;
}
//alerts 'B', returns function a

function c() {
  alert('C');
  return a();
}
//alerts 'C', alerts 'A', returns undefined

alert("Function 'a' returns " + a());
alert("Function 'b' returns " + b());
alert("Function 'c' returns " + c());

在您的示例中,您还将在函数中定义函数。例如:

代码语言:javascript
复制
function d() {
  function e() {
    alert('E');
  }
  return e;
}
d()();
//alerts 'E'

该函数仍然是可调用的。它仍然存在。这在JavaScript中一直都在使用。函数可以像其他值一样传递。请考虑以下几点:

代码语言:javascript
复制
function counter() {
  var count = 0;
  return function() {
    alert(count++);
  }
}
var count = counter();
count();
count();
count();

函数count可以保留在其外部定义的变量。这称为闭包。它在JavaScript中也被大量使用。

票数 142
EN

Stack Overflow用户

发布于 2011-10-03 07:23:44

返回不带()的函数名将返回对该函数的引用,可以像使用var s = a()一样进行赋值。s现在包含对函数b()的引用,调用s()在功能上等同于调用b()

代码语言:javascript
复制
// Return a reference to the function b().
// In your example, the reference is assigned to var s
return b;

在return语句中使用()调用函数将执行该函数,并返回该函数返回的任何值。它类似于调用var x = b();,但不是分配b()的返回值,而是从调用函数a()返回返回值。如果函数b()本身没有返回值,则在b()完成任何其他工作后,该调用将返回undefined

代码语言:javascript
复制
// Execute function b() and return its value
return b();
// If b() has no return value, this is equivalent to calling b(), followed by
// return undefined;
票数 45
EN

Stack Overflow用户

发布于 2011-10-03 07:26:23

return b();调用函数b()并返回其结果。

return b;返回对函数b的引用,您可以将其存储在一个变量中,以便稍后调用。

票数 42
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7629891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档