Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.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
使用1个参数定义JavaScript函数,然后不使用任何参数调用它_Javascript - Fatal编程技术网

使用1个参数定义JavaScript函数,然后不使用任何参数调用它

使用1个参数定义JavaScript函数,然后不使用任何参数调用它,javascript,Javascript,我将以下代码作为Google JS Youtube API的示例使用: function outputStatus(e) { alert("e.success = " + e.success +"\ne.id = "+ e.id +"\ne.ref = "+ e.ref); } swfobject.embedSWF("test6.swf", "myContent", "300", "120", "9.0.0", "expressInstall.swf",

我将以下代码作为Google JS Youtube API的示例使用:

    function outputStatus(e) {
        alert("e.success = " + e.success +"\ne.id = "+ e.id +"\ne.ref = "+ e.ref);
    }
    swfobject.embedSWF("test6.swf", "myContent", "300", "120", "9.0.0", "expressInstall.swf", null, null, null, outputStatus);
第页它来自:

API文档:


所以我想弄清楚这是怎么回事。我知道,
outputStatus(e)
被用作
swfobject.embedSWF(…)
的回调函数,但我不明白在没有参数的情况下如何调用它。有人能解释一下进入这样一个过程的机制吗?

没有参数就不能调用它。你在这里做了什么

swfobject.embedSWF("test6.swf", "myContent", "300", "120", "9.0.0", "expressInstall.swf", null, null, null, outputStatus);
将函数引用传递给
embedSWF
函数,而不是执行它

embedSWF
函数作为其代码中某个地方的回调函数独立调用该函数

要了解这是如何工作的,您必须了解函数是用JavaScript编写的。这意味着它们可以存储在变量中并作为参数传递。考虑下面的代码

var myFunction = function() {
    //do something
}

//storing the function reference in another variable
//in a sense, 'pointing' at it
//notice the absence of parantheses (), which would invoke the function immediately
var callback = myFunction;

//execute the function pointed at by callback
//which is the same as executing myFunction
callback();

您必须记住,swfobject.embedSWF在某些地方被定义为一个函数。让我们假装它看起来像这样

swfobject.embedSWF = function(){

}
现在,当我们以回调的形式传入outputStatus函数时,EmbeddesWF可以执行如下操作

   swfobject.embedSWF = function(outputStatus){
     var e = 'something useful';
     outputStatus(e);
   }

因此,它最终会被一个参数e调用,但他们将其封装起来,作为API的用户,您将无法使用它。

Javascript中的函数可以传递并分配给变量和函数参数:

function myFunction(x){
    console.log("Hello", x);
}

var func = myFunction; //This just makes "func" refer to myFunction;
                       //It does NOT call "myFunction" yet because there are no parenthesis.

func(10);
将函数作为参数传递给其他函数的工作原理类似:

function myFunction(x){
    console.log("Hello", x);
}

function doIt(func){
    func(10);
}

doIt(myFunction);

正如其他人提到的,只传递函数的回调<代码>输出状态在您提供的代码示例中没有被显式调用-
embedSWF
可能是在内部调用
outputStatus


但是,JavaScript函数可以在没有参数的情况下调用,也可以使用比函数上定义的参数更多的参数来调用。这种行为非常有用,因为JavaScript中没有内置函数重载。但是,在本例中,在没有参数的情况下调用
outputStatus
,将导致
e
未定义,并引发异常

在该行中没有调用它,它只是作为参数传递给
.embedSWF(…)
调用。在
embedSWF
中的某个地方,有一个函数调用
回调(e)
。请记住,您不是在调用函数,而是将对该函数的引用传递给另一个函数。然后该函数调用您的函数。