标签: anonymous-function

Javascript阻止匿名功能?

我经常要绑定?一些需要参数的函数.我使用的解决方案是将函数包装在匿名函数内部.

function foo( arg_0 ) {
   // do stuff with: arg_0
}

function bar() {
   var abc;
   // stuff happens
   abc = 'some value';
   attachEventHandler(elementId, 'click', function(){foo( abc );});
}
bar();
Run Code Online (Sandbox Code Playgroud)

有更优雅的方式吗?

javascript binding anonymous-function

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

在最终括号之前或之后将函数调用放在自执行javascript函数之间是否有任何区别

可能重复:
自动执行匿名JavaScript函数的括号位置?

答案可能很简单,但我只是好奇.

我已经看到自编写的函数

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

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

包含函数的括号在调用之前关闭的位置.两者似乎都具有完全相同的效果,所以我只是想知道性能是否会有任何差异?

javascript anonymous-function

5
推荐指数
0
解决办法
96
查看次数

如何从字符串调用anonymus函数

我有字符串包含anonymus函数定义,但我怎么称呼它.让我们说功能是这样的:

var fn_str = "function(){ alert('called'); }";
Run Code Online (Sandbox Code Playgroud)

试过eval,但得到一个错误,该函数必须有一个名字.

eval(fn_str).apply(this); // SyntaxError: function statement requires a name
Run Code Online (Sandbox Code Playgroud)

javascript anonymous-function

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

更改匿名函数的名称?

函数对象具有名为name的非标准属性.有谁知道改变它的方法?或者任何其他方式来更改匿名函数的名称?如果JavaScript可以创建动态命名的变量,那将是很好的,但它似乎只能创建公共对象属性名称.
我想做什么?
我正在努力实现这样的目标.

// o - literal object, or json
// c - string
function givemeConstructor(o, c, a}){
    var a = a || 'Object';
    // check other variables
    var cons;

    if(a === 'Object'){
        cons = function(){};
        for(p in o) cons.prototype[p] = o[p];
        cons.name = c;
    }
    else{
        // a way to create a constructor that inherits from a
        // adds object as new prototype
    }

    return cons;            
}

var cons = givemeConstructor({x:1,y:1, toString:function(){return '['+ x + ','+ y+'']'}, 'Point'})
Run Code Online (Sandbox Code Playgroud)


最终得到一个内省的对象.

javascript anonymous-function

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

为什么匿名函数表达式和命名函数表达式的初始化方式如此不同?

我正在查看第13节或ECMAScript规范(第5节).匿名函数表达式初始化如下:

返回使用FormalParameterListopt指定的参数和FunctionBody指定的主体创建13.2中指定的新Function对象的结果.将正在运行的执行上下文的LexicalEnvironment作为Scope传递.如果FunctionExpression包含在严格代码中或者其FunctionBody是严格代码,则传入true作为Strict标志.

这个逻辑与初始化函数声明的方式非常相似.但是,请注意命名的funciton表达式的不同初始化方式.

  1. 让funcEnv成为调用NewDeclarativeEnvironment传递正在运行的执行上下文的Lexical Environment作为参数的结果
  2. 让envRec成为funcEnv的环境记录.
  3. 调用envRec的CreateImmutableBinding具体方法,将Identifier的String值作为参数传递.
  4. 让闭包是创建一个新的Function对象的结果,该对象在13.2中指定,其中参数由FormalParameterListopt和FunctionBody指定的body指定.传入funcEnv作为范围.如果FunctionExpression包含在严格代码中或者其FunctionBody是严格代码,则传入true作为Strict标志.
  5. 调用envRec的InitializeImmutableBinding具体方法,将Identifier和closure的String值作为参数传递.
  6. 关闭.

我知道命名/匿名函数表达式之间的一个重大区别是命名函数表达式可以在函数内递归调用,但这就是我能想到的.为什么设置如此不同?为什么需要执行这些额外的步骤?

javascript function anonymous-function ecma262 ecmascript-5

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

使用单个命令锁定和解锁资源

我正在使用线程,这就是我使用互斥锁来锁定共享资源的原因.锁定的基本用法是将资源放在Lock/unlock块中.

procedure RefreshData;
begin    
   DataLock;
      GetData;
      GetSettings;
      CheckValues;
      ...
   DataUnlock;
end;
Run Code Online (Sandbox Code Playgroud)

因为总有一对锁定/解锁我开始考虑简化锁定/解锁方法,这将在不再需要时自动解锁资源.

所以我的想法是引入新程序,该程序将输入参数作为对precedure的引用.这将使我能够使用匿名方法.

代码将是这样的:

type TBaseProc = reference to procedure;

procedure TMyObject.LockMethod(AMeth: TBaseProc);
begin
  DataLock;
  try
    AMeth;
  finally
    DataUnlock;
  end;
end;


procedure TForm1.RefreshData;
begin
  MyObject.LockMethod(
   procedure 
   begin
     GetData;
     GetSettings;
     CheckValues;
     ...
   end;
  );

end;
Run Code Online (Sandbox Code Playgroud)

这种方法有任何意义,还是有更好甚至更简单的解决方案?

感谢致敬.

delphi mutex locking anonymous-function delphi-xe6

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

闭包 - 捕获变量和将它们作为参数读取之间的差异

假设我们有这个课程:

// Provides deferred behaviour
public class Command<TResult>
{
     private Func<object[], TResult> _executeFunction;
     private object[] _args;

     public Command(Func<object[], TResult> execution, params object[] arguments)
     {
          _executeFunction = execution;
          _args = arguments;
     }

     public TResult Execute()
     {
          return _executeFunction(_args);
     }
}
Run Code Online (Sandbox Code Playgroud)

这两个匿名函数有什么区别?

int a = 1;
int b = 4;

// a and b are passed in as arguments to the function
Command<int> sum = new Command<int>(args => (int)args[0] + (int)args[1], a, b);

// a and b are captured by the function …
Run Code Online (Sandbox Code Playgroud)

.net c# lambda closures anonymous-function

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

Moq一个具有匿名类型的函数

我正在尝试模拟这种方法

Task<TResult> GetResultAsync<TResult>(Func<string, TResult> transformFunc)
Run Code Online (Sandbox Code Playgroud)

像这样

iMock.Setup(m => m.GetResultAsync(It.IsAny<Func<string, object>>())).ReturnsAsync(new { isPair = false });
Run Code Online (Sandbox Code Playgroud)

测试调用方法,将匿名类型传递给通用参数,例如:

instance.GetResultAsync(u => new {isPair = u == "something" }) //dont look at the function return because as generic could have diferent implementations in many case
Run Code Online (Sandbox Code Playgroud)

Moq从未将我的GetResultAsync方法与发送的参数匹配。

我正在使用Moq 4

c# unit-testing moq anonymous-types anonymous-function

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

在Javascript中将匿名函数作为回调传递

有没有办法在Javascript中将匿名函数作为自定义回调函数传递?我有这个代码:

function notifyme(msg){
    console.log(msg)
}

notifyme("msg", function(){
    //do some custom redirect logic    
});
Run Code Online (Sandbox Code Playgroud)

我正在尝试上面的代码,它正在执行notifyme函数,但没有进一步使用重定向代码.我知道我可以将函数名称作为回调传递,但是我没有可以通过的特定函数.这就是为什么他们发明了我猜的匿名函数.

如果有办法做到这一点真的很好.

javascript callback anonymous-function

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

[SonarLint]:让这个匿名的内部类成为一个lambda

下面的代码有效,但是我收到SonarLint的通知,因为我在流中使用了一个匿名类而不是lambda表达式,我没有看到如何改进下面的代码来避免通知:

Properties prop = new Properties();
Properties temp = new Properties();
//... add some values and keys in prop and temp

prop.putAll(temp.entrySet().stream()
    .filter( entry -> !prop.containsKey(entry.getKey()))
    .map( new Function<Entry<Object, Object>, Entry<String, String>>(){ 
        @Override
        public Entry<String, String> apply(Entry<Object, Object> entry) {
            return new Entry<String, String>() {
                @Override
                public String setValue(String value) {
                    return value.trim().toLowerCase();
                }

                @Override
                public String getValue() {
                    return ((String) entry.getValue()).trim().toLowerCase();
                }

                @Override
                public String getKey() {
                    return ((String) entry.getKey()).trim().toLowerCase();
                }
            };
        }
    })
    .collect(Collectors.toMap(Entry<String,String>::getKey, Entry<String,String>::getValue)));
Run Code Online (Sandbox Code Playgroud)

代码的解释: 我使用java.util中的属性类,不幸的是entrySet …

lambda anonymous-function java-8 java-stream sonarlint

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