标签: anonymous-function

JavaScript匿名函数立即调用/执行(表达式与声明)

可能的重复:
JavaScript中的函数表达式与声明之间有什么区别?
解释JavaScript封装的匿名函数语法

为什么这个:

(function () {
    //code
}());
Run Code Online (Sandbox Code Playgroud)

还有这个:

var f = function () {
    //code
}();
Run Code Online (Sandbox Code Playgroud)

工作,而这:

function () {
    //code
}();
Run Code Online (Sandbox Code Playgroud)

才不是?它看起来完全一样 - 定义了匿名函数,并立即调用.有人可以从JavaScript/ECMAScript标准中引用它来解释这个吗?

更新:感谢大家的答案!所以这是关于函数表达式与函数声明的关系.请参阅此Stack Overflow答案,ECMAScript标准第13节,以及这篇精彩文章:命名函数表达式揭秘.

回顾一下答案:

  1. 第一个片段被解释为表达式,因为应用了分组运算符()- 请参阅ECMAScript标准第11.1.6节.

  2. 在第二个片段中,函数被解释为表达式,因为它位于赋值运算符的右侧部分=.

  3. 第三个片段没有任何允许解释器将函数作为表达式读取的东西,因此它被认为是一个声明,如果没有标识符则无效(Gecko允许它通过,但它会跟随下面的()分组操作符(因为它认为) )什么都不适用).

javascript anonymous-function

58
推荐指数
1
解决办法
2万
查看次数

用于标记匿名函数的Javascript"冒号"?

这段代码也引用了什么?

queryString: function() {

//some code

}
Run Code Online (Sandbox Code Playgroud)

我在WebConsole(Firefox)中对它进行了测试,但它不会执行,因此我认为它不等同于function queryString() {}.

那究竟是什么?

javascript function anonymous-function object-literal colon

58
推荐指数
4
解决办法
3万
查看次数

Python Lambda循环

考虑以下代码段:

# directorys == {'login': <object at ...>, 'home': <object at ...>}
for d in directorys:
    self.command["cd " + d] = (lambda : self.root.change_directory(d))
Run Code Online (Sandbox Code Playgroud)

我希望创建一个包含两个函数的字典如下:

# Expected :
self.command == {
    "cd login": lambda: self.root.change_directory("login"),
    "cd home": lambda: self.root.change_directory("home")
}
Run Code Online (Sandbox Code Playgroud)

但看起来生成的两个lambda函数完全相同:

# Result :
self.command == {
    "cd login": lambda: self.root.change_directory("login"),
    "cd home": lambda: self.root.change_directory("login")   # <- Why login ?
}
Run Code Online (Sandbox Code Playgroud)

我真的不明白为什么.你有什么建议吗 ?

python loops anonymous-function

57
推荐指数
3
解决办法
2万
查看次数

如何在CoffeScript中传递两个匿名函数作为参数?

我想传递两个匿名函数作为jQuery的悬停的参数,如下所示:

$('element').hover(
  function() {
    // do stuff on mouseover
  },
  function() {
    // do stuff on mouseout
  }
);
Run Code Online (Sandbox Code Playgroud)

只用一个就很容易hover ->- 但是CoffeeScript中的两个正确语法是什么?我试过...hover ->,...hover( ->...等等,但没有任何东西让我得到上述结构.

javascript jquery anonymous-function coffeescript

55
推荐指数
4
解决办法
2万
查看次数

选择基于正则表达式调用的Python函数

是否可以将函数放在数据结构中,而不是先给它命名def

# This is the behaviour I want. Prints "hi".
def myprint(msg):
    print msg
f_list = [ myprint ]
f_list[0]('hi')
# The word "myprint" is never used again. Why litter the namespace with it?
Run Code Online (Sandbox Code Playgroud)

lambda函数的主体受到严格限制,所以我不能使用它们.

编辑:作为参考,这更像是我遇到问题的现实代码.

def handle_message( msg ):
    print msg
def handle_warning( msg ):
    global num_warnings, num_fatals
    num_warnings += 1
    if ( is_fatal( msg ) ):
        num_fatals += 1
handlers = (
    ( re.compile( '^<\w+> (.*)' ), handle_message ),
    ( re.compile( '^\*{3} (.*)' ), handle_warning ), …
Run Code Online (Sandbox Code Playgroud)

python lambda anonymous-function

54
推荐指数
7
解决办法
4万
查看次数

Javascript匿名函数调用

当我遇到调用匿名函数的奇怪方式时,我正在阅读Twitter上的JS源代码 - 在改进我的JS知识库的过程中:

!function( $ ) {
    ...
}( window.jQuery );
Run Code Online (Sandbox Code Playgroud)

......这有效!:)

对每个人来说,显而易见的是:

function ( $ ) { ... } ( window.jQuery )
Run Code Online (Sandbox Code Playgroud)

不起作用(语法错误),而这一个是正确的:

(function ( $ ) { .... })( window.jQuery )
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释这个魔术(为什么案例与!function作品)?

javascript anonymous-function

53
推荐指数
2
解决办法
5万
查看次数

是否可以在匿名函数中设置断点?

我很快就想确定是否/何时触发了一组事件.因此我很快给他们分配了空的lambda.

_session.TopologyStarted += () => { };
Run Code Online (Sandbox Code Playgroud)

在触发事件时跟踪代码时,调试器进入匿名函数,允许调试它的执行.但是,在此代码行上设置断点时,会在为事件分配匿名函数时设置断点.

有没有办法在匿名函数中设置断点?

c# lambda anonymous-function visual-studio-2010

51
推荐指数
1
解决办法
9390
查看次数

使用GCC语句表达式的匿名函数

这个问题并不十分具体; 这真的是我自己的C浓缩,我希望其他人也能发现它有用.

免责声明:我知道很多人会有回应的冲动"如果你试图做FP然后只使用一种功能语言".我在一个需要链接到许多其他C库的嵌入式环境中工作,并且没有太多空间用于更多大型共享库,并且不支持许多语言运行时.而且,动态内存分配是不可能的.我也很好奇.

我们中的许多人已经看到了lambda表达式的这个漂亮的C宏:

#define lambda(return_type, function_body) \
({ \
      return_type __fn__ function_body \
          __fn__; \
})
Run Code Online (Sandbox Code Playgroud)

一个示例用法是:

int (*max)(int, int) = lambda (int, (int x, int y) { return x > y ? x : y; });
max(4, 5); // Example
Run Code Online (Sandbox Code Playgroud)

使用gcc -std=c89 -E test.c,lambda扩展为:

int (*max)(int, int) = ({ int __fn__ (int x, int y) { return x > y ? x : y; } __fn__; });
Run Code Online (Sandbox Code Playgroud)

所以,这些是我的问题:

  1. 线int(*X)究竟是什么?宣布?当然,int*X; 是指向整数的指针,但这两者有何不同?

  2. 看一下这个扩大的宏观,最终会__fn__做什么呢?如果我写一个测试函数 …

c lambda gcc anonymous-function

49
推荐指数
2
解决办法
2万
查看次数

为什么要使用匿名功能?

可能重复:
你如何在PHP中使用匿名函数?

我为什么要使用匿名函数?我的意思是,使用它的真正优惠是什么?我真的不明白这一点.我的意思是,你使用函数使代码更干净或多次使用它.但匿名函数不是第一个也不是第二个.我用谷歌搜索了他们,我找不到有人问同样的问题.

php closures design-patterns anonymous-function

46
推荐指数
4
解决办法
2万
查看次数

为什么以及如何在PHP中使用匿名函数?

PHP 5.3提供匿名函数.
我应该使用它们还是避免使用它们?如果是这样,怎么样?

编辑 ; 刚刚用php匿名函数发现了一些不错的技巧......

$container           = new DependencyInjectionContainer();
$container->mail     = function($container) {};
$conteiner->db       = function($container) {};
$container->memcache = function($container) {};
Run Code Online (Sandbox Code Playgroud)

php anonymous-function

44
推荐指数
3
解决办法
4万
查看次数