Javascript 在空函数中返回函数的结果有什么用途吗?

Javascript 在空函数中返回函数的结果有什么用途吗?,javascript,web,google-tag-manager,Javascript,Web,Google Tag Manager,在本例中,一个函数的返回作为另一个函数的返回传递。我不确定我是否理解这样做的必要性。 例如: 当它看起来像这样时: function(){ // Check if the page contains the div var node = document.getElementById("sponsored-content"); // use whatever id your block has isInBody = document.body.c

在本例中,一个函数的返回作为另一个函数的返回传递。我不确定我是否理解这样做的必要性。 例如:

当它看起来像这样时:

 function(){
        // Check if the page contains the div
        var node = document.getElementById("sponsored-content"); // use whatever id your block has
        isInBody = document.body.contains(node);

        // If true
        if (isInBody){
            dataLayer.push({'event':'spContent-detected'});
        }
    }
为了更好地理解上下文,是原始代码的源代码。如果条件为false,添加它似乎会停止任何其他js的运行

在本例中,一个函数的返回作为另一个函数的返回传递

这不是代码所做的。它返回的是函数(本身,实际的函数对象),而不是函数的结果。外部函数不是调用内部函数,而是创建并返回它。内部函数中的代码直到/除非接收到外部函数返回的函数引用的代码调用它,否则不会执行

什么时候会变成这样

它不可能,它做了完全不同的事情。在调用以前的外部函数时立即运行代码的。但第一个示例并不是运行该代码,而是创建一个函数,如果调用它,该函数将运行它

这个例子可能有助于澄清这一点:

//创建函数的函数,在本例中为乘法函数
//创建函数时使用的值为它们指定的任何数字
函数生成乘数(mult){
返回函数(arg){
返回arg*mult;
};
}
//创建(但不要运行!)一个乘以10的函数
var m1=最大乘数(10);
//运行几次
snippet.log(m1(5));//50
snippet.log(m1(7));//70
//创建(但不要运行!)一个乘以7的函数
var m2=最大乘数(7);
//运行几次
snippet.log(m2(5));//35
snippet.log(m2(7));//49
//再次运行它们中的每一个,以显示它们之间没有相互关联
snippet.log(m1(6));//60
snippet.log(m2(6));//42

在本例中,一个函数的返回作为另一个函数的返回传递

这不是代码所做的。它返回的是函数(本身,实际的函数对象),而不是函数的结果。外部函数不是调用内部函数,而是创建并返回它。内部函数中的代码直到/除非接收到外部函数返回的函数引用的代码调用它,否则不会执行

什么时候会变成这样

它不可能,它做了完全不同的事情。在调用以前的外部函数时立即运行代码的。但第一个示例并不是运行该代码,而是创建一个函数,如果调用它,该函数将运行它

这个例子可能有助于澄清这一点:

//创建函数的函数,在本例中为乘法函数
//创建函数时使用的值为它们指定的任何数字
函数生成乘数(mult){
返回函数(arg){
返回arg*mult;
};
}
//创建(但不要运行!)一个乘以10的函数
var m1=最大乘数(10);
//运行几次
snippet.log(m1(5));//50
snippet.log(m1(7));//70
//创建(但不要运行!)一个乘以7的函数
var m2=最大乘数(7);
//运行几次
snippet.log(m2(5));//35
snippet.log(m2(7));//49
//再次运行它们中的每一个,以显示它们之间没有相互关联
snippet.log(m1(6));//60
snippet.log(m2(6));//42

 function(){
        // Check if the page contains the div
        var node = document.getElementById("sponsored-content"); // use whatever id your block has
        isInBody = document.body.contains(node);

        // If true
        if (isInBody){
            dataLayer.push({'event':'spContent-detected'});
        }
    }