Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript中将参数传递给匿名函数?_Javascript_Jquery - Fatal编程技术网

如何在JavaScript中将参数传递给匿名函数?

如何在JavaScript中将参数传递给匿名函数?,javascript,jquery,Javascript,Jquery,我试图弄清楚如何在JavaScript中将参数传递给匿名函数 查看此示例代码,我想您会明白我的意思: <input type="button" value="Click me" id="myButton" /> <script type="text/javascript"> var myButton = document.getElementById("myButton"); var myMessage = "it's working"; myB

我试图弄清楚如何在JavaScript中将参数传递给匿名函数

查看此示例代码,我想您会明白我的意思:

<input type="button" value="Click me" id="myButton" />

<script type="text/javascript">
    var myButton = document.getElementById("myButton");
    var myMessage = "it's working";
    myButton.onclick = function(myMessage) { alert(myMessage); };
</script>

var myButton=document.getElementById(“myButton”);
var myMessage=“它正在工作”;
myButton.onclick=函数(myMessage){alert(myMessage);};
单击按钮时,应显示消息:
正在工作
。但是,匿名函数中的
myMessage
变量为空


jQuery使用了很多匿名函数,传递该参数的最佳方式是什么?

您的具体情况可以简单地更正为正常工作:

<script type="text/javascript">
  var myButton = document.getElementById("myButton");
  var myMessage = "it's working";
  myButton.onclick = function() { alert(myMessage); };
</script>

var myButton=document.getElementById(“myButton”);
var myMessage=“它正在工作”;
myButton.onclick=function(){alert(myMessage);};
此示例之所以有效,是因为创建并分配为元素处理程序的匿名函数将访问在创建它的上下文中定义的变量


对于该记录,处理程序(通过设置onxxx属性指定)需要一个参数作为DOM传递的事件对象,并且不能通过删除匿名函数中的参数来强制传递其中的其他参数

    myButton.onclick = function() { alert(myMessage); };

有关更多信息,请搜索“javascript闭包”

您所做的工作不起作用,因为您正在将事件绑定到函数。因此,事件定义了在引发事件时将调用的参数(即JavaScript不知道您绑定到onclick的函数中的参数,因此无法向其中传递任何信息)

但是,您可以这样做:

<input type="button" value="Click me" id="myButton"/>

<script type="text/javascript">

    var myButton = document.getElementById("myButton");

    var myMessage = "it's working";

    var myDelegate = function(message) {
        alert(message);
    }

    myButton.onclick = function() { 
        myDelegate(myMessage);
    };

</script>

var myButton=document.getElementById(“myButton”);
var myMessage=“它正在工作”;
var myDelegate=函数(消息){
警报(信息);
}
myButton.onclick=函数(){
myDelegate(myMessage);
};

您所做的是创建一个新的匿名函数,该函数接受一个参数,然后将该参数分配给函数中的局部变量myMessage。由于实际上没有传递任何参数,并且没有传递值的参数变为null,因此函数只会发出警报(null)。

如果您像这样编写它的话

myButton.onclick = function() { alert(myMessage); };
它会起作用,但我不知道这是否能回答您的问题。

示例:

<input type="button" value="Click me" id="myButton">
<script>
    var myButton = document.getElementById("myButton");
    var test = "zipzambam";
    myButton.onclick = function(eventObject) {
        if (!eventObject) {
            eventObject = window.event;
        }
        if (!eventObject.target) {
            eventObject.target = eventObject.srcElement;
        }
        alert(eventObject.target);
        alert(test);
    };
    (function(myMessage) {
        alert(myMessage);
    })("Hello");
</script>

var myButton=document.getElementById(“myButton”);
var test=“zipzambam”;
myButton.onclick=函数(eventObject){
如果(!eventObject){
eventObject=window.event;
}
如果(!eventObject.target){
eventObject.target=eventObject.srcElement;
}
警报(eventObject.target);
警报(测试);
};
(功能(myMessage){
警报(myMessage);
})(“你好”);
学员们:

function displayMessage(message, f)
{
    f(message); // execute function "f" with variable "message"
}

function alerter(message)
{
    alert(message);
}

function writer(message)
{
    document.write(message);
}
运行displayMessage功能:

function runDelegate()
{
    displayMessage("Hello World!", alerter); // alert message

    displayMessage("Hello World!", writer); // write message to DOM
}

事件处理程序需要一个参数,即触发的事件。您碰巧将其重命名为“myMessage”,因此您正在提醒事件对象而不是您的消息

闭包可以让您引用在函数外部定义的变量,但是如果您使用Jquery,您可能需要查看其特定于事件的API,例如

这有一个选项用于传递您自己的数据。


<input type="button" value="Click me" id="myButton" />

<script type="text/javascript">
    var myButton = document.getElementById("myButton");

    myButton.myMessage = "it's working";

    myButton.onclick = function() { alert(this.myMessage); };


</script>
var myButton=document.getElementById(“myButton”); myButton.myMessage=“它正在工作”; myButton.onclick=function(){alert(this.myMessage);};

这在我的测试套件中起作用,它包括了从IE6+到其他的一切。匿名函数知道它所属的对象,因此您可以通过调用它的对象(在本例中为myButton)传递数据。

以下是使用闭包解决您所指问题的方法。它还考虑到这样一个事实,即可能需要在不影响绑定的情况下随时间更改消息。它使用jQuery来简洁

var msg = (function(message){
  var _message = message;
  return {
    say:function(){alert(_message)},
    change:function(message){_message = message}
  };
})("My Message");
$("#myButton").click(msg.say);

正如你所说,我需要仔细阅读“javascript闭包”。。谢谢一个更改:eventObject=eventObject | | window.event;还有一个更改:eventObject=eventObject | | window.event |{};另一个更改:eventObject.target=eventObject.target | | eventObject.srcElement | | null;我在学习。为什么要将消息分配给
\u
?为什么不直接使用
message
?在这种情况下,我这样做是为了让change方法的内部范围可以有一个有效的签名,否则就无法更改外部闭包中的消息值。使用闭包的回答很好。但是,我会重命名“change”函数参数,因为“message”具有误导性,应该更清楚的是,它与外部“message”参数无关。该函数可以这样重构:change:function(newmessage){{u message=newmessage}我看不出lambda如何理解消息,lambda将其返回值分配给myDelegate。我见过类似lambdas的函数(a,b){//code here}(a,b);关闭: