Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.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_Node.js_Function_Callback - Fatal编程技术网

Javascript 匿名回调函数澄清

Javascript 匿名回调函数澄清,javascript,node.js,function,callback,Javascript,Node.js,Function,Callback,我正在复习回调函数,并在 “当我们将回调函数作为参数传递给另一个函数时,我们只传递函数定义。我们没有在参数中执行函数。换句话说,我们没有像执行函数时那样传递带有后一对执行括号()的函数 由于包含函数的参数中包含回调函数作为函数定义,因此它可以随时执行回调。” 有人能解释一下吗?下面是他们提供的两个例子 ​//The item is a callback function $("#btn_1").click(function() { alert("Btn 1 Clicked"); }); 下

我正在复习回调函数,并在

“当我们将回调函数作为参数传递给另一个函数时,我们只传递函数定义。我们没有在参数中执行函数。换句话说,我们没有像执行函数时那样传递带有后一对执行括号()的函数

由于包含函数的参数中包含回调函数作为函数定义,因此它可以随时执行回调。”

有人能解释一下吗?下面是他们提供的两个例子

​//The item is a callback function
$("#btn_1").click(function() {
  alert("Btn 1 Clicked");
});
下面是另一个例子:

var friends = ["Mike", "Stacy", "Andy", "Rick"];
​
friends.forEach(function (eachName, index){
console.log(index + 1 + ". " + eachName); // 1. Mike, 2. Stacy, 3. Andy, 4. Rick​
});
请注意,回调函数不会立即执行。它是在包含函数体中的某个指定点“回调”(因此而得名)的。因此,即使第一个jQuery示例如下所示:

//The anonymous function is not being executed there in the parameter. ​
​//The item is a callback function
   $("#btn_1").click(function() {
     alert("Btn 1 Clicked");
   });
稍后将在函数体中调用匿名函数。即使没有名称,包含函数也可以稍后通过arguments对象访问它。“

对于jquery的第一个示例,他们到底在说什么。如果单击#btn_1元素,是否会执行匿名函数?我假设如果点击按钮,它会被执行,但是文章中的措辞令人困惑


类似地,对于第二个示例,它们是否不需要调用作为参数bc传递的函数?它是匿名的?

在javascript中,函数是第一类成员,您可以将函数作为参数传递,被调用函数可以将其作为命名参数接受

下面是一个简单的例子

function testme(callback) {
    //here the argument callback refers to the passed function

    //the timer is used just to delay the execution of the callback
    setTimeout(function () {
        //the passed function is called here
        callback();
    }, 1000)
}

testme(function () {
    alert('x')
})
演示:



在您的示例中,单击id为
btn_1
的元素后,将执行第一次回调。

在这两个示例中,您都将匿名函数作为参数传递

$("#btn_1").click(function() {
  alert("Btn 1 Clicked");
});
jQuery的click方法将函数作为其第一个参数。假设click的函数定义如下:

function click(fn) {
    // fn will contain a reference to any 
    // function passed as the first parameter to click
    // merely calling fn does nothing, because you are just 'calling' 
    // the reference.
    fn;
    // Since what is inside of fn is a function, you can execute it 
    // with the () syntax
    fn();
}
// Now, you have many ways to pass a function as the first parameter to the function

// 1. As an anonymous function:
click(function() {
    console.log("Hi");
});

// 2. As a named function:
click(function hello() {
    console.log("Hi");
});

// 3. As a reference to a function declaration
function hiThere() {
    console.log("Hi");
}
click(hiThere);

// 4. As a variable that holds an anonymous function inside
var howdy = function () {
    console.log("howdy");
};
click(howdy);
想象一下,函数就像变量一样,但它们的内部有可以在最后使用
()
执行的内容

function hi() {
    console.log('bye');
}

hi; // Calls the reference, but does not execute it. This does nothing.
hi.toString(); // Returns the function as a string
hi(); // Executes the code within the function
无论何时声明命名函数,都可以根据其名称对其进行处理,就像处理变量一样。当然,与变量不同,它们在内部保存可执行代码,而不是值

你不能引用匿名函数,因为它很好。。。匿名的除非,否则将其放在有名称的东西内,如
var

var iHoldAFunctionInside = function () {
    console.log('Im not so anonymous now');
};
iHoldAFunctionInside(); // Logs "Im not so anonymous now"
这就是为什么可以将匿名函数作为参数传递给函数,它可以作为回调函数执行。因为参数现在“保存”了其中的匿名函数:

function iExecuteYourCallback(callback) {
    // callback contains the anonymous function passed to it
    // Similar to doing:
    // var callback = function () { };
    callback();
}
iExecuteYourCallback(function() {
    console.log('Im a callback function!');
});

希望这有助于澄清一些问题。

好的,那么在这种情况下,bc函数不是匿名的,您必须显式执行/调用该方法?@djfkd39939,即bc的情况,您是否同意我所说的(即,我是否正确解释了它?)…执行匿名回调时不需要显式调用/回调,而作为另一个函数的参数的命名函数需要显式调用/回调?@djfkd39939使用
回调()
调用该函数,无论该函数是否为匿名函数。接收回调的函数根本不关心该函数是否匿名。仅供参考,
callbackFunction=function(){alert('x')}
仍然会创建一个匿名函数,您只是将其分配给了一个变量。@djfkd39939:当有人单击该元素时,会执行该函数。“无处显式调用”好吧,实际调用发生在浏览器内部的某个地方。理论上。实际上,jQuery可能会称之为。你可以看看它的源代码。这是一个非常好的摘要(我显然不能再打字了)。是的,没错。
iExecuteYourCallback
函数将不起任何作用。它将只是一个传递了另一个函数的函数,但对它不做任何操作,并且随着键入的速度而消失。调用回调就是调用回调(
callback()
)@费利克斯克林哈哈,非常感谢。(哦,我认为这是故意的:p.谢谢!)嗯,它被传递给函数,函数把它作为参数。但在使用
callback()
显式执行回调之前,回调不会发生任何变化。功能“消失”得很快,而且在其很短的使用寿命内没有实现任何重要的功能。它不会被执行,因为您只是将其作为参数传递,但该函数对您传递给它的参数不做任何处理。@djfkd39939:基本上就像您将函数声明为
function foo(){console.log('foo');}
,但从不调用
foo()
。函数存在了一段时间,但它什么都不做。