在Javascript中,我具有来自外部库的以下功能:
getParentTabId(callback);
在代码的其他部分,它的用法如下:
var openTab = function(result){
var parentId = result.Id;
//opentNewTab is another external function
openNewTab(parentId, 'https://www.google.com');
}
function handleOnClick(){
getParentTabId(openTab);
}
那是行得通的。我的目的是传递openNewTab变量作为第二个参数,而不是使用固定值(例如“ https://www.google.com ”),如下所示:
var openTab = function(result, url){
var parentId = result.Id;
//opentNewTab is another external function
openNewTab(parentId, url);
}
我尝试了以下方法:
function handleOnClick(){
var url = 'http://stackoverflow.com';
getParentTabId(function(result){
openTab(url, result);
});
}
但这是行不通的,因为回调无法看到该url
变量。考虑到我无法修改getParentTabId函数,您将如何解决此问题?
您可以尝试声明一个函数getOpenTab
,该函数返回openTab
带有动态url的函数:
function getOpenTab(url) {
return function(result) {
var parentId = result.Id;
//opentNewTab is another external function
openNewTab(parentId, url);
}
}
function handleOnClick() {
getParentTabId(getOpenTab('www.foo.com'));
}
说明:您正确地声明了该回调未“看到” url参数,因为在getParentTabId
回调的实现中称为callback(result)
。这就是为什么必须动态创建回调函数的原因。
现在,如何创建具有动态内容的功能?简单,只需创建另一个函数即可,该函数返回具有所需动态参数的回调函数。
使用匿名功能,整个过程变为:
function handleOnClick() {
var url = 'www.foo.com';
getParentTabId(function(result) {
var parentId = result.Id;
openNewTab(parentId, url);
});
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句