将局部变量传递给只能对其进行有限更改的函数

Passing a local variable to a function that I can only make limited changes to

本文关键字:函数 局部变量      更新时间:2023-09-26

我刚开始接触JavaScript,在SO上找不到这样的确切场景,所以我要试试运气。我在一个外部JS文件中有两个函数,在我们的网站上创建视频提要:

function getVideos() {
    //gets a list of videos
}
//callback function automatically called by getVideos()
function response(jsonData) { //can't change this line
    var resp = document.getElementById("resp"); //can change this line and any subsequent lines
    //parses data and populates resp
}

然后,从HTML端,我们只需调用getVideos(),视频提要就会被创建并填充。

但是,我希望能够将任何元素ID传递到response()中,以便我们可以在同一页面的不同位置创建多个视频提要。问题是我不能改变response()的函数声明来包含另一个参数。或者至少我不相信我可以通过托管我们视频的公司。

我试过用getVideos()包装response()并从那里传递一个元素ID,但是response()没有被调用,我能想到的唯一解决方案是在全局变量中存储一个元素ID,我知道这在JavaScript中是一个禁忌。

我的问题是:我只是咬紧牙关,使用一个全局变量,还是有另一种方式?

更多信息,这里是我们的JS代码,因为它现在站(闭包):http://www.thebearrocks.com/Other/js/videoFeed/createVideoFeed.js下面是我们视频的主持人提供的关于response()的教程:http://support.brightcove.com/en/video-cloud/docs/making-media-api-calls-dynamic-script-tags

可以使用参数吗?像这样:

function response(jsonData) { //callback function automatically called by getVideos()
    var elemId = arguments.length<2 ? "resp" : arguments[1]+"";
    var resp = document.getElementById(elemId);
    //parses data and populates resp
}

或者,像这样声明具有默认值的第二个参数:

function response(jsonData, elemId) { 
    elemId = elemId || "resp";
    var resp = document.getElementById(elemId);
    //parses data and populates resp
}
在这种情况下,

函数可以用一个或两个参数来调用

我试过用getVideos()包装response()并从那里传递一个元素ID,但是response()没有被调用,我能想到的唯一解决方案是在全局变量中存储一个元素ID,我知道这在JavaScript中是一个禁忌。

我的问题是:我是咬紧牙关使用全局变量,还是有其他方法?

。不是id变量需要成为全局变量,而是您的本地response函数需要成为全局变量,以便从JSONP脚本回调-您将创建一个闭包。

你可以通过调用

来"导出"它
window.response = mylocalResponseFunction; // you did name that local var "response"