我的函数里面已经定义了多个函数,那么我如何在外部得到其中一个函数的返回值

阿志2 2016-09-11 01:27:44
//----------------------提取二级js文件集方法加强版开始----------------------//
function fetch_second_js_urls_extend(){
//得到关键词 注意是全局变量
keywords = document.getElementById("js_in_keywords").value.trim();

//判断关键词是否为空 首页源代码是否为空不须判断,因为 second_find_urls() 函数已经判断了
if(keywords == '')
{
alert("开始前必须输入关键词");
}
else//开始处理剩下的一切过程
{
//从二级网址集中提取二级关键词页面-播放页面地址集
var arr_keywords_js_in = second_find_urls().filter(function (currentValue){
return currentValue.search(keywords) > -1 ; //包含关键词
})

alert("关键词页面-播放页面集提取完成,接下来请不要点击鼠标,同时不要敲击键盘.也不要关闭本页面");
//alert(arr_keywords_js_in);
//打印关键词页面集 arr_keywords_js_in

var str='';
document.getElementById("keywords_in_urls").value='';
document.getElementById("counts_keywords_in_urls").value=0;
for(var a=0,b=arr_keywords_js_in.length;a < b; a++)
{
str = str + '第' + (a+1) + '条:' + arr_keywords_js_in[a] + '\n\n';
document.getElementById("counts_keywords_in_urls").value=a+1;//条数计数
}
document.getElementById("keywords_in_urls").value=str;
//打印关键词-播放页面集完成

//声明一个空的数组,用于拼接二级js地址集 注意是全局变量
s_js_global = new Array();

var i =1;//错误次数

//--源数据是 播放页面地址集--//
var data = arr_keywords_js_in;

//--单个任务处理进程--//
function Process(dataitem){
try
{
eval(Load_Html_Doc(dataitem));
s_js_global = s_js_global.concat(find_js_urls(html_doc));//此处得到js文件地址集 并拼接成一个单维数组children
delete(html_doc);
}
catch(err)
{
alert("false "+i);
i++;
Process(dataitem);//queue.shift()

}

}

//--回调函数.处理完成后去重补全,打印,返回二级js文件集结果--//
function Done(){
//全局变量用于顶层函数返回值
s_js_complete_global = complete_sub_mothod(s_js_global.distinct());
//打印二级js文件地址集

var str='';//用于逐条打印二级js地址集
document.getElementById("js_urls").value='';//清空残留内容
document.getElementById("counts_js_total").value=0;//清空记数
for(var i=0,j=s_js_complete_global.length;i < j; i++)
{
str = str + '第' + (i+1) + '条:' + s_js_complete_global[i] + '\n\n';
document.getElementById("counts_js_total").value= i+1;//条数计数
}
document.getElementById("js_urls").value="共 " + j + " 条\n\n" + str;
//打印二级js文件集完毕
alert("提取二级js文件集完毕.如需提取二级js文件集源码.请点击那个加强版按钮");
//删除全局变量--原始二级js地址集
delete(s_js_global);
//设置一个本回调函数执行完毕的标识 如果此全局变量被正确赋值了 那么说明本程序已经生成了 s_js_complete_global 变量
//tag_s_js = 1;
return s_js_complete_global;
}
//----计时处理程序,防浏览器假死方法----//
function ProcessArray(data,handler,callback){
var maxtime = 150;
var delay = 30;
var queue = data.concat();
setTimeout(function(){
var endtime = new Date() + maxtime;
do{
handler(queue.shift());
}while(queue.length>0 && endtime > new Date());

if(queue.length > 0)
{
setTimeout(arguments.callee, delay);
}
else
{
if (callback) callback();
}
},delay);
}

//最后执行防假死方法
ProcessArray(data, Process, Done);
}
}
//----------------------提取二级js文件集方法加强版结束----------------------//

函数 fetch_second_js_urls_extend() 里面定义的那些函数所 要求的参数全部正常传递了。

fetch_second_js_urls_extend()在外部调用后正常运行.现在我不打算利用那个全局变量s_js_complete_global。而是在外部直接捕获到那个函数 Done()返回值s_js_complete_global。

请问我应该怎么在外部获取 Done() 的返回值s_js_complete_global?
我新手 用过了很多方法都不行的
...全文
397 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿志2 2016-09-24
  • 打赏
  • 举报
回复
引用 6 楼 KK3K2005 的回复:
[quote=引用 5 楼 bajie315 的回复:] [quote=引用 3 楼 KK3K2005 的回复:] [quote=引用 2 楼 bajie315 的回复:]
引用
将执行后的结果放到数组里return回去?
1..程序上下文 决定了 执行后的结果 就是一个数组。所以不用放到数组里了。 2..直接用 fetch_second_js_urls_extend()方法return s_js_complete_global 变量出去?我在外部调用的时候会出错。会提示这个变量s_js_complete_global 未定义 undefined!死活都是未定义。 3..后来我试了下发现是 setTimeout的 问题...因为 执行 Done() 的时间是在调用 fetch_second_js_urls_extend() 以后的某个时间。这中间还要执行 Process(dataitem) 方法。而这个 Process(dataitem) 方法要处理大量数据。占用了大量时间。 4..总体调用情况如下: fetch_second_js_urls_extend(){ //--源数据是 播放页面地址集--// var data = arr_keywords_js_in; //--单个任务处理进程--// function Process(dataitem){ ....... } //--回调函数.处理完成后去重补全,打印,返回二级js文件集结果--// function Done(){ ....... return s_js_complete_global; } //----计时处理程序,防浏览器假死方法----// function ProcessArray(data,handler,callback){ ..... } //最后执行防假死方法 ProcessArray(data, Process, Done); } 以上可以看出当我调用 fetch_second_js_urls_extend()方法时。内部要花很多时间处理Process(dataitem)。最后才处理Done(),也就是 return s_js_complete_global; 5..比如我在外部这样写: fetch_second_js_urls_extend(); alert(s_js_complete_global );//undefined 结果就是 undefined。 我分析了下函数内部还在延时的时候 就调用到了 alert(s_js_complete_global ); 此时s_js_complete_global 还没有被正确赋值。 自然就是空的数组了,没有数据。达不到目的。 6..最后我发现了问题所在: 当我这样写: setTimeout(function(){ alert(s_js_complete_global ); },6000); 是可以得到预期结果的。 7..那么问题来了。 我如何才能设置 那个 6000 毫秒延时,而又不耽误我尽快得到正确结果呢?我当然可以设置1分钟 2分钟 10分钟。但是我不打算浪费时间。把那个6000毫秒设置成刚刚 程序处理完毕 給s_js_complete_global 赋值后 就马上调用这个 s_js_complete_global 的那个延时时间。我不知道如何获取到那个时间。
你这个适合用回调机制 非即时的语句顺序 要使用回调 什么意思 就是 a 依赖 b 如果b是瞬时的 没有等待 定时器之类的代码 哪么 a = b() 这样ok 如果b不是瞬时的代码 哪么 这样定义 function b(callback) { //......... //........ //var v = 1; callback(v); } 这样调用 b(fucntion(v){ alert(v); }) [/quote] 头半部分说对了。后半部分你指的是 在原来的函数内部调用还是外部调用。我原来的函数里面 有定义三个函数的。[/quote] 你去百度搜索一个主题 回调函数[/quote] 搜索了。还是没能解决
阿志2 2016-09-24
  • 打赏
  • 举报
回复
引用 8 楼 BN_xiaoP 的回复:
把结果放进数组里,然后使用return返回
源码在 这里 http://download.csdn.net/detail/bajie315/9638626 你拿去修改下 改好了发回給我 我目前用的是全局变量调用方式
阿志2 2016-09-24
  • 打赏
  • 举报
回复
引用 8 楼 BN_xiaoP 的回复:
把结果放进数组里,然后使用return返回
是可以 但是不能得到实时结果,系统会先执行的代码,导致不能使用 这个 return 返回的数据
BN_xiaoP 2016-09-24
  • 打赏
  • 举报
回复
把结果放进数组里,然后使用return返回
阿志2 2016-09-13
  • 打赏
  • 举报
回复
引用 3 楼 KK3K2005 的回复:
[quote=引用 2 楼 bajie315 的回复:]
引用
将执行后的结果放到数组里return回去?
1..程序上下文 决定了 执行后的结果 就是一个数组。所以不用放到数组里了。 2..直接用 fetch_second_js_urls_extend()方法return s_js_complete_global 变量出去?我在外部调用的时候会出错。会提示这个变量s_js_complete_global 未定义 undefined!死活都是未定义。 3..后来我试了下发现是 setTimeout的 问题...因为 执行 Done() 的时间是在调用 fetch_second_js_urls_extend() 以后的某个时间。这中间还要执行 Process(dataitem) 方法。而这个 Process(dataitem) 方法要处理大量数据。占用了大量时间。 4..总体调用情况如下: fetch_second_js_urls_extend(){ //--源数据是 播放页面地址集--// var data = arr_keywords_js_in; //--单个任务处理进程--// function Process(dataitem){ ....... } //--回调函数.处理完成后去重补全,打印,返回二级js文件集结果--// function Done(){ ....... return s_js_complete_global; } //----计时处理程序,防浏览器假死方法----// function ProcessArray(data,handler,callback){ ..... } //最后执行防假死方法 ProcessArray(data, Process, Done); } 以上可以看出当我调用 fetch_second_js_urls_extend()方法时。内部要花很多时间处理Process(dataitem)。最后才处理Done(),也就是 return s_js_complete_global; 5..比如我在外部这样写: fetch_second_js_urls_extend(); alert(s_js_complete_global );//undefined 结果就是 undefined。 我分析了下函数内部还在延时的时候 就调用到了 alert(s_js_complete_global ); 此时s_js_complete_global 还没有被正确赋值。 自然就是空的数组了,没有数据。达不到目的。 6..最后我发现了问题所在: 当我这样写: setTimeout(function(){ alert(s_js_complete_global ); },6000); 是可以得到预期结果的。 7..那么问题来了。 我如何才能设置 那个 6000 毫秒延时,而又不耽误我尽快得到正确结果呢?我当然可以设置1分钟 2分钟 10分钟。但是我不打算浪费时间。把那个6000毫秒设置成刚刚 程序处理完毕 給s_js_complete_global 赋值后 就马上调用这个 s_js_complete_global 的那个延时时间。我不知道如何获取到那个时间。
你这个适合用回调机制 非即时的语句顺序 要使用回调 什么意思 就是 a 依赖 b 如果b是瞬时的 没有等待 定时器之类的代码 哪么 a = b() 这样ok 如果b不是瞬时的代码 哪么 这样定义 function b(callback) { //......... //........ //var v = 1; callback(v); } 这样调用 b(fucntion(v){ alert(v); }) [/quote] 我试试看。好像有点思路了。谢谢指导
KK3K2005 2016-09-13
  • 打赏
  • 举报
回复
引用 5 楼 bajie315 的回复:
[quote=引用 3 楼 KK3K2005 的回复:] [quote=引用 2 楼 bajie315 的回复:]
引用
将执行后的结果放到数组里return回去?
1..程序上下文 决定了 执行后的结果 就是一个数组。所以不用放到数组里了。 2..直接用 fetch_second_js_urls_extend()方法return s_js_complete_global 变量出去?我在外部调用的时候会出错。会提示这个变量s_js_complete_global 未定义 undefined!死活都是未定义。 3..后来我试了下发现是 setTimeout的 问题...因为 执行 Done() 的时间是在调用 fetch_second_js_urls_extend() 以后的某个时间。这中间还要执行 Process(dataitem) 方法。而这个 Process(dataitem) 方法要处理大量数据。占用了大量时间。 4..总体调用情况如下: fetch_second_js_urls_extend(){ //--源数据是 播放页面地址集--// var data = arr_keywords_js_in; //--单个任务处理进程--// function Process(dataitem){ ....... } //--回调函数.处理完成后去重补全,打印,返回二级js文件集结果--// function Done(){ ....... return s_js_complete_global; } //----计时处理程序,防浏览器假死方法----// function ProcessArray(data,handler,callback){ ..... } //最后执行防假死方法 ProcessArray(data, Process, Done); } 以上可以看出当我调用 fetch_second_js_urls_extend()方法时。内部要花很多时间处理Process(dataitem)。最后才处理Done(),也就是 return s_js_complete_global; 5..比如我在外部这样写: fetch_second_js_urls_extend(); alert(s_js_complete_global );//undefined 结果就是 undefined。 我分析了下函数内部还在延时的时候 就调用到了 alert(s_js_complete_global ); 此时s_js_complete_global 还没有被正确赋值。 自然就是空的数组了,没有数据。达不到目的。 6..最后我发现了问题所在: 当我这样写: setTimeout(function(){ alert(s_js_complete_global ); },6000); 是可以得到预期结果的。 7..那么问题来了。 我如何才能设置 那个 6000 毫秒延时,而又不耽误我尽快得到正确结果呢?我当然可以设置1分钟 2分钟 10分钟。但是我不打算浪费时间。把那个6000毫秒设置成刚刚 程序处理完毕 給s_js_complete_global 赋值后 就马上调用这个 s_js_complete_global 的那个延时时间。我不知道如何获取到那个时间。
你这个适合用回调机制 非即时的语句顺序 要使用回调 什么意思 就是 a 依赖 b 如果b是瞬时的 没有等待 定时器之类的代码 哪么 a = b() 这样ok 如果b不是瞬时的代码 哪么 这样定义 function b(callback) { //......... //........ //var v = 1; callback(v); } 这样调用 b(fucntion(v){ alert(v); }) [/quote] 头半部分说对了。后半部分你指的是 在原来的函数内部调用还是外部调用。我原来的函数里面 有定义三个函数的。[/quote] 你去百度搜索一个主题 回调函数
阿志2 2016-09-13
  • 打赏
  • 举报
回复
引用 3 楼 KK3K2005 的回复:
[quote=引用 2 楼 bajie315 的回复:]
引用
将执行后的结果放到数组里return回去?
1..程序上下文 决定了 执行后的结果 就是一个数组。所以不用放到数组里了。 2..直接用 fetch_second_js_urls_extend()方法return s_js_complete_global 变量出去?我在外部调用的时候会出错。会提示这个变量s_js_complete_global 未定义 undefined!死活都是未定义。 3..后来我试了下发现是 setTimeout的 问题...因为 执行 Done() 的时间是在调用 fetch_second_js_urls_extend() 以后的某个时间。这中间还要执行 Process(dataitem) 方法。而这个 Process(dataitem) 方法要处理大量数据。占用了大量时间。 4..总体调用情况如下: fetch_second_js_urls_extend(){ //--源数据是 播放页面地址集--// var data = arr_keywords_js_in; //--单个任务处理进程--// function Process(dataitem){ ....... } //--回调函数.处理完成后去重补全,打印,返回二级js文件集结果--// function Done(){ ....... return s_js_complete_global; } //----计时处理程序,防浏览器假死方法----// function ProcessArray(data,handler,callback){ ..... } //最后执行防假死方法 ProcessArray(data, Process, Done); } 以上可以看出当我调用 fetch_second_js_urls_extend()方法时。内部要花很多时间处理Process(dataitem)。最后才处理Done(),也就是 return s_js_complete_global; 5..比如我在外部这样写: fetch_second_js_urls_extend(); alert(s_js_complete_global );//undefined 结果就是 undefined。 我分析了下函数内部还在延时的时候 就调用到了 alert(s_js_complete_global ); 此时s_js_complete_global 还没有被正确赋值。 自然就是空的数组了,没有数据。达不到目的。 6..最后我发现了问题所在: 当我这样写: setTimeout(function(){ alert(s_js_complete_global ); },6000); 是可以得到预期结果的。 7..那么问题来了。 我如何才能设置 那个 6000 毫秒延时,而又不耽误我尽快得到正确结果呢?我当然可以设置1分钟 2分钟 10分钟。但是我不打算浪费时间。把那个6000毫秒设置成刚刚 程序处理完毕 給s_js_complete_global 赋值后 就马上调用这个 s_js_complete_global 的那个延时时间。我不知道如何获取到那个时间。
你这个适合用回调机制 非即时的语句顺序 要使用回调 什么意思 就是 a 依赖 b 如果b是瞬时的 没有等待 定时器之类的代码 哪么 a = b() 这样ok 如果b不是瞬时的代码 哪么 这样定义 function b(callback) { //......... //........ //var v = 1; callback(v); } 这样调用 b(fucntion(v){ alert(v); }) [/quote] 头半部分说对了。后半部分你指的是 在原来的函数内部调用还是外部调用。我原来的函数里面 有定义三个函数的。
KK3K2005 2016-09-12
  • 打赏
  • 举报
回复
引用 2 楼 bajie315 的回复:
引用
将执行后的结果放到数组里return回去?
1..程序上下文 决定了 执行后的结果 就是一个数组。所以不用放到数组里了。 2..直接用 fetch_second_js_urls_extend()方法return s_js_complete_global 变量出去?我在外部调用的时候会出错。会提示这个变量s_js_complete_global 未定义 undefined!死活都是未定义。 3..后来我试了下发现是 setTimeout的 问题...因为 执行 Done() 的时间是在调用 fetch_second_js_urls_extend() 以后的某个时间。这中间还要执行 Process(dataitem) 方法。而这个 Process(dataitem) 方法要处理大量数据。占用了大量时间。 4..总体调用情况如下: fetch_second_js_urls_extend(){ //--源数据是 播放页面地址集--// var data = arr_keywords_js_in; //--单个任务处理进程--// function Process(dataitem){ ....... } //--回调函数.处理完成后去重补全,打印,返回二级js文件集结果--// function Done(){ ....... return s_js_complete_global; } //----计时处理程序,防浏览器假死方法----// function ProcessArray(data,handler,callback){ ..... } //最后执行防假死方法 ProcessArray(data, Process, Done); } 以上可以看出当我调用 fetch_second_js_urls_extend()方法时。内部要花很多时间处理Process(dataitem)。最后才处理Done(),也就是 return s_js_complete_global; 5..比如我在外部这样写: fetch_second_js_urls_extend(); alert(s_js_complete_global );//undefined 结果就是 undefined。 我分析了下函数内部还在延时的时候 就调用到了 alert(s_js_complete_global ); 此时s_js_complete_global 还没有被正确赋值。 自然就是空的数组了,没有数据。达不到目的。 6..最后我发现了问题所在: 当我这样写: setTimeout(function(){ alert(s_js_complete_global ); },6000); 是可以得到预期结果的。 7..那么问题来了。 我如何才能设置 那个 6000 毫秒延时,而又不耽误我尽快得到正确结果呢?我当然可以设置1分钟 2分钟 10分钟。但是我不打算浪费时间。把那个6000毫秒设置成刚刚 程序处理完毕 給s_js_complete_global 赋值后 就马上调用这个 s_js_complete_global 的那个延时时间。我不知道如何获取到那个时间。
你这个适合用回调机制 非即时的语句顺序 要使用回调 什么意思 就是 a 依赖 b 如果b是瞬时的 没有等待 定时器之类的代码 哪么 a = b() 这样ok 如果b不是瞬时的代码 哪么 这样定义 function b(callback) { //......... //........ //var v = 1; callback(v); } 这样调用 b(fucntion(v){ alert(v); })
阿志2 2016-09-11
  • 打赏
  • 举报
回复
引用
将执行后的结果放到数组里return回去?
1..程序上下文 决定了 执行后的结果 就是一个数组。所以不用放到数组里了。 2..直接用 fetch_second_js_urls_extend()方法return s_js_complete_global 变量出去?我在外部调用的时候会出错。会提示这个变量s_js_complete_global 未定义 undefined!死活都是未定义。 3..后来我试了下发现是 setTimeout的 问题...因为 执行 Done() 的时间是在调用 fetch_second_js_urls_extend() 以后的某个时间。这中间还要执行 Process(dataitem) 方法。而这个 Process(dataitem) 方法要处理大量数据。占用了大量时间。 4..总体调用情况如下: fetch_second_js_urls_extend(){ //--源数据是 播放页面地址集--// var data = arr_keywords_js_in; //--单个任务处理进程--// function Process(dataitem){ ....... } //--回调函数.处理完成后去重补全,打印,返回二级js文件集结果--// function Done(){ ....... return s_js_complete_global; } //----计时处理程序,防浏览器假死方法----// function ProcessArray(data,handler,callback){ ..... } //最后执行防假死方法 ProcessArray(data, Process, Done); } 以上可以看出当我调用 fetch_second_js_urls_extend()方法时。内部要花很多时间处理Process(dataitem)。最后才处理Done(),也就是 return s_js_complete_global; 5..比如我在外部这样写: fetch_second_js_urls_extend(); alert(s_js_complete_global );//undefined 结果就是 undefined。 我分析了下函数内部还在延时的时候 就调用到了 alert(s_js_complete_global ); 此时s_js_complete_global 还没有被正确赋值。 自然就是空的数组了,没有数据。达不到目的。 6..最后我发现了问题所在: 当我这样写: setTimeout(function(){ alert(s_js_complete_global ); },6000); 是可以得到预期结果的。 7..那么问题来了。 我如何才能设置 那个 6000 毫秒延时,而又不耽误我尽快得到正确结果呢?我当然可以设置1分钟 2分钟 10分钟。但是我不打算浪费时间。把那个6000毫秒设置成刚刚 程序处理完毕 給s_js_complete_global 赋值后 就马上调用这个 s_js_complete_global 的那个延时时间。我不知道如何获取到那个时间。
似梦飞花 2016-09-11
  • 打赏
  • 举报
回复
将执行后的结果放到数组里return回去?

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧