标签: anonymous-function

Firefox Javascript事件匿名函数

我正在尝试在用户单击HTML表格中的单元格时注册匿名函数.这是一些原始的,纯粹的代码:

document.getElementById(
    "course"+displayed_year_index+occurrences_indices[displayed_year_index]).onclick =
        eval("function() {PrintReceipt("+result.years[result_year_index].rul_code+");};");
Run Code Online (Sandbox Code Playgroud)

注意使用eval,因为它位于一个循环中,并且匿名函数每次都是不同的.

可以说,这在Firefox 2中运行得非常好.但是,Firefox 3会抛出"语法错误",指向"函数"一词后的括号内.

有没有人对如何解决这个问题有任何明智的想法?


为了清楚地说明我正在尝试做什么,这里有一个简单的例子:

for (index=0; index<4; index++) {
    document.getElementById("div"+index).onclick = 
        eval("function () {Foo(index);};");
}
Run Code Online (Sandbox Code Playgroud)

换句话说,我希望触发相同的功能,每个参数值都有不同的参数值div.

javascript firefox closures anonymous-function event-handling

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

我可以将"new"匿名函数传递给addEventListener

我使用这样的代码将参数传递给事件处理函数.但是,在这种特殊情况下,循环会导致问题.在所有activeVisual调用中只能访问最后一个linkTags [i].这与传递参数的匿名函数对于整个循环是一个相同的事实有关.

  for (var i = 0; i < linkTags.length; i++) {
    addCrossEvent(linkTags[i], "click", launchLink);
    addCrossEvent(linkTags[i], "mousedown", 
      function(evt) {
        activeVisual(evt, linkTags[i]);
      });
  }
Run Code Online (Sandbox Code Playgroud)

现在,我记得在匿名函数声明之前尝试添加new,如下所示:

  for (var i = 0; i < linkTags.length; i++) {
    addCrossEvent(linkTags[i], "click", launchLink);
    addCrossEvent(linkTags[i], "mousedown", 
      new function(evt) {
        activeVisual(evt, linkTags[i]);
      });
  }
Run Code Online (Sandbox Code Playgroud)

那没起效.activeVisual永远不会被调用.有人可以向我解释为什么以及如何让它成功呢?

更新最终解决方案

感谢下面的所有回复,我的工作代码现在看起来像这样:

  // Function that provides pass of event handling parameters with separate copy in each loop
  function callbackHandler(index) {
    return function(evt) {
      activeVisual(evt, linkTags[index]);
    }
  }
  ...
  for (var i = 0; …
Run Code Online (Sandbox Code Playgroud)

javascript events arguments anonymous-function

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

setTimeout在匿名函数里面

我想在我的jQuery函数中调用editObject(),初始化调用确实有效,但是setTimeout不起作用,如何让它运行?控制台说setTimeout调用时没有定义editObject:

(function($){
    $.fn.extend({

                    ...

                    editObject()

            function editObject() {
                alert("Test!");
                setTimeout('editObject()', 1000);
            }

            return this.each(function() {
                var o = options;
            });
        }
    });
})(jQuery);
Run Code Online (Sandbox Code Playgroud)

感谢帮助!

javascript anonymous-function settimeout

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

使用匿名函数递归

可能重复:
javascript:递归匿名函数?
匿名递归PHP函数

我在想......是否可以使用匿名函数进行递归?

这是一个例子:我需要得到六个字符长的字符串,它可能只包含数字和空格.唯一的规则是它不能以空格开头或结尾.我们检查一下,如果发生这种情况 - 只需在相同的匿名函数上调用递归.怎么样!?

function() {

    $chars   = range(0, 9);
    $chars[] = ' ';
    length   = 6;
    $count   = count($chars);

    $string = '';
    for ($i = 0; $i < $length; ++$i) {

        $string .= $chars[mt_rand(0, $count - 1)];

    }

    $string = trim($string);

    if (strlen($string) !== $length) { // There were spaces in front or end of the string. Shit!

        // Do recursion.

    }

    return $string;

}
Run Code Online (Sandbox Code Playgroud)

php recursion reference anonymous-function anonymous-recursion

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

如何使用jQuery在函数中存储ajax调用的结果?

我有以下代码:

function checkPermission(user) {
    var result = 'default';
    $.get('/mymodule/checkPermission.php?user=' + user, function(data) {
        result = data; // does not store data into result, why ?
        if (result == 'no') {
            $('.sorry_msg').show();
        }
    });
    alert(result); // shows "default".
    return result == 'yes';
}
Run Code Online (Sandbox Code Playgroud)

你能解释为什么这不起作用.问题是我无法存储data变量result,请参阅代码中的注释.我想这是因为匿名函数,但我不知道javascript到底能够准确理解会发生什么.

另外,如何可以返回truefalsecheckPermission基于Ajax调用的结果函数?

javascript jquery scope asynchronous anonymous-function

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

在perl中的子例程中声明全局变量

我想知道是否可以在Perl的子例程中声明一个全局变量,这样我就可以在钩子化的void函数中使用该变量,但是通过在子例程中声明它来限制全局的破坏性影响.

因此子例程用于XML::Parser收集一堆元素的ID,方式类似于:

sub getRecipeIDs {
    my $recipe = shift;
    my @elements = ();

    my $parser = new XML::Parser(Style => 'Tree',
        Handlers => {
            Start => sub {
                my ($expat, $element, %attrs) = @_;
                if ($element eq 'recipe') {
                    push @elements, $attrs{id};
                }
        }});

    $parser->parse($recipe);

    return @elements;
}
Run Code Online (Sandbox Code Playgroud)

我也在strict我的剧本中使用.

所以我想以@elements这样的方式声明它是本地的,getRecipeIDs但是对于匿名子例程是可见的.

感谢您的时间,非常感谢任何帮助.

xml perl anonymous-function subroutine

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

PHP匿名函数变量作为参考

在使用Laravel框架时,更具体的 - 表单宏,我偶然发现了一个奇怪的错误.

起初,我认为Laravel有点不对劲,但后来我把所有东西都脱离了背景:

<?php

// placeholder function that takes variable as reference
$function = function(&$reference)
{
    // append to variable
    $reference = $reference . ':' . __METHOD__;
};

// test with straight call
$variable = 'something';
$function($variable);
echo $variable;


// test with call_user_func(), that gets called in Laravels case
$variable = 'something'; // reset
call_user_func($function, $variable);
echo $variable;
Run Code Online (Sandbox Code Playgroud)

第一次$function正确执行调用时,第二次尝试使用call_user_func(),生成(摘自Codepad):

Warning: Parameter 1 to {closure}() expected to be a reference, value given
PHP Warning: Parameter 1 …
Run Code Online (Sandbox Code Playgroud)

php reference function anonymous-function

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

匿名Scala函数中的块语句

我创建了这个简单的匿名函数

var b = (x : Int) => if(x % 2 == 0) x + 1 else x
Run Code Online (Sandbox Code Playgroud)

它很棒.之后,我尝试在if和x+1语句之前添加另一个语句.

var b = (x : Int) => if(x % 2 == 0) println(x) x + 1 else x
Run Code Online (Sandbox Code Playgroud)

并且在那一点上我收到了以下编译器错误

无法解析符号x

请任何人都可以告诉我为什么会这样吗?

scala anonymous-function

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

如何在整数列表中使用erlang中的foldl返回最大整数?

我想使用下面的Erlang代码来获取整数列表中的最高整数,但由于某种原因,总会最终获得列表中的最后一个整数。有什么帮助吗?

解决方案示例-> test:max([2,8,5,6]).应该返回8,但使用此代码将返回6。

-spec max(L) -> M when
  L::[integer()],
  M::integer().

max([H | T]) ->
F = fun(L, Acc) -> max([L]) end,
lists:foldl(F, H, T).
Run Code Online (Sandbox Code Playgroud)

erlang max anonymous-function fold

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

Elixir:使用&运算符从命名函数中获取匿名函数是否有任何好处

所以我正在阅读这本书,并在某些时候指出:

还有第二种形式的&function capture操作符.您可以为其指定现有函数的名称和arity(参数数量),它将返回一个调用它的匿名函数.

但我不明白为什么有人想要这样做.如果您愿意,可以将命名和未命名函数绑定到变量,从中可以获得什么好处.

operators anonymous-function elixir

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