强制传递在javascript中作为参数返回对象的匿名函数

强制传递在javascript中作为参数返回对象的匿名函数,javascript,anonymous-function,argument-passing,Javascript,Anonymous Function,Argument Passing,我有以下代码 1) var x = {}; x.data = {name: 'name', lname: 'lname'}; x.someOtherData = ['blah','blah','irrelevant']; aFunction(x); 所以我多次调用上述语句组,语句的顺序当然很重要。有时我会忘记执行函数(x)的最后一个语句,这让我很头疼,因此我做了以下工作: 2) aFunction(function(){ var x = {}; x.d

我有以下代码

1)  var x = {};
    x.data = {name: 'name', lname: 'lname'};
    x.someOtherData = ['blah','blah','irrelevant'];
    aFunction(x);
所以我多次调用上述语句组,语句的顺序当然很重要。有时我会忘记执行函数(x)的最后一个语句,这让我很头疼,因此我做了以下工作:

2) aFunction(function(){
    var x = {};
    x.data = {name: 'name', lname: 'lname'};
    x.someOtherData = ['blah','blah','irrelevant'];
    return x; 
   }());                     
这是可行的,我很好奇,在我的函数方法aFunction中,是否有一种方法可以强制传递的参数必须是匿名函数。我正在从匿名函数返回一个对象,因此下面的操作显然不起作用

3) function aFunction(x) {
    if(x.constructor == Function) {
      alert('yay you're doing it right'); 
    } else { 
     alert('nay, you're doing it wrong'); //this is what happens given that x.constructor == Object
   }
}
我知道我可以执行以下操作,上面的检查也可以,但我想将我的所有逻辑都放在函数参数中,放在括号中,如代码段2中所示:

4) var z =  function(){
   var x = {};
   x.data = {name: 'name', lname: 'lname'};
   x.someOtherData = ['blah','blah','irrelevant'];
   return x; 
  };
  aFunction(z);  
有什么想法吗

更新:

没关系,我想出来了。我不能像调用函数方法那样立即调用匿名函数。确定有助于在堆栈溢出中写出您的问题,以便问题和解决方案更清晰。仍然对其他人如何解决类似问题持开放态度。设计模式等

解决方案:

aFunction(function(){
var x = {};
x.data = {name: 'name', lname: 'lname'};
x.someOtherData = ['blah','blah','irrelevant'];
return x; 
}))

}

我很好奇,在我的function方法中是否有一种强制执行的方法,
affunction
,即传递的参数必须是匿名函数

但您没有传递匿名函数。您正在调用匿名函数并传递结果

您可以传递一个函数(而不是调用函数的结果),然后在
a函数(x)
中测试
x
是否为函数,然后调用它以获取要使用的值/对象:

function aFunction(x) {
    if(typeof x === "function") {
        var workingValue = x();
    }
}
当然,这并不能确保传入的函数以正确的格式返回值。此外,它也不能确保它是一个匿名函数

您的第二个语法很好,其优点是将任何工作变量保持在当前范围之外(假设这不会破坏某些内容),但只要您声明的目标是确保在其他处理结束时不会忘记调用
affunction()
,那么。。。我的观点是,这只会让其他人更难阅读代码

编辑:刚刚看到你更新的问题,你决定做我上面提到的事情(好像你在更新我的答案的同时)。说真的,我真的认为这是一个糟糕的设计模式,我只是把它作为一个假设的解决方案提了出来——我不认为我一开始就明确表示我不推荐它


在我看来,你原来的1号版本是最好的方法,或者如果你必须使用一个函数,你的2号版本也可以。

我不确定我是否完全理解-你想要选项#4,但只需要在调用中内联
函数(){…}
?这样你就可以通过匿名函数“函数内的参数”。顺便问一下,你是否考虑过做“代码>函数”({数据:{…},一些其他数据:……});代码>?是的,明白了。谢谢你的及时回复
function aFunction(x) {
    if(typeof x === "function") {
        var workingValue = x();
    }
}