关于js匿名函数的返回值的获取问题

我还在读js的基础书籍,所以对一些js原理了解不是全面,所以问题如有愚昧,还请见谅。

 function asynSubmit(sData,action,method="POST"){
    var httpRequest = new XMLHttpRequest();
    var rMessage="请求未发送";
    httpRequest.open(method,action);
    httpRequest.setRequestHeader("content-type","application/x-www-form-urlencoded");
    httpRequest.send(sData);
    httpRequest.onreadystatechange=function(){
        if(httpRequest.readyState===4){
            console.log("4");
            if(httpRequest.status===200){
                console.log("200");
                var rData=httpRequest.responseText;
                //JSON.parse(httpRequest.responseText);
                return rData;
            }else{
                return "服务器异常";
            }
        }else{
            return "服务器未响应";
        }
    }
}

如上述代码,我想封装一个ajax的函数。想让函数返回responseText的值,因为onredeaychang调用了匿名函数,在匿名函数里返回的值我要怎么在外层函数获取?或者有其他什么方法能达到我的目的?我也试过在外层函数定义变量,在匿名函数里为变量赋值,但由于匿名函数绑定了事件,所以这样做直接返回空值。

自己想了很久,也百度过了,实在想不出解决办法,还请各位不吝赐教。

1

2个回答

你要reutrn也要在asynSubmit最后,在匿名函数里面return是匿名函数的返回值,并不是asynSubmit的。而且你设计到ajax,只有改为同步asynSubmit return才能获取到值,异步的只能通过回掉形式来获取值

同步

  function asynSubmit(sData,action,method="POST"){
 var rst=false;/////////////

    var httpRequest = new XMLHttpRequest();
    var rMessage="请求未发送";
    httpRequest.open(method,action,false);//////////////改同步
    httpRequest.setRequestHeader("content-type","application/x-www-form-urlencoded");
    httpRequest.send(sData);
    httpRequest.onreadystatechange=function(){
        if(httpRequest.readyState===4){
            console.log("4");
            if(httpRequest.status===200){
                console.log("200");
                var rData=httpRequest.responseText;
                //JSON.parse(httpRequest.responseText);
                rst= rData;////////////////////////////////////
            }else{
                rst= "服务器异常";////////////////////////////////////
            }
        }else{
            rst= "服务器未响应";////////////////////////////////////
        }
    }
        return rst////////////////////////////////////
}
var data=asynSubmit('xxx','xxxx','xxxxx')//
alert(data)

异步,只能回掉,无法return


 function asynSubmit(sData,action,method="POST",callback){
    var httpRequest = new XMLHttpRequest();
    var rMessage="请求未发送";
    httpRequest.open(method,action);
    httpRequest.setRequestHeader("content-type","application/x-www-form-urlencoded");
    httpRequest.send(sData);
    httpRequest.onreadystatechange=function(){
        if(httpRequest.readyState===4){
            console.log("4");
            if(httpRequest.status===200){
                console.log("200");
                var rData=httpRequest.responseText;
                //JSON.parse(httpRequest.responseText);
               callback( rData);////////////////////
            }else{
                callback( "

服务器异常");////////////////////
}
}else{
callback( "服务器未响应");////////////////////
}
}
}

asynSubmit('xxx','xxxx','xxxxx',function(data){alert(data)})//

4
Accenzer
Accenzer 非常感谢您的用心解答~正中要害,完美解决了我的问题!感谢感谢!
2 年多之前 回复
 function test(){
        var result = function (){
            return "value";
        }
        alert(result());//value
    }
    window.onload = test;
1
Accenzer
Accenzer 回复极简: 好的,谢谢。我去学习一下回调函数。
2 年多之前 回复
guwei4037
guwei4037 回复Accenzer: 事件就只能在回调函数里面处理啦。
2 年多之前 回复
Accenzer
Accenzer 谢谢回答,将匿名函数赋予变量然后返回这个变量。但是我的这个函数里匿名函数绑定了一个事件 httpRequest.onreadystatechange,这样的话要怎么办呢?
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
JS函数 -- 功能,语法,返回值,匿名函数,自调用匿名函数,全局变量与局部变量,arguments的使用
转载自:https://www.cnblogs.com/platycoden/p/5198852.html JS函数 -- 功能,语法,返回值,匿名函数,自调用匿名函数,全局变量与局部变量,arguments的使用: .全局变量与局部变量 1 2 i=10; //全局变量 3 var j=20; //全局变量 4
js返回匿名函数的疑惑
在我的概念里代码段1和代码段2执行结果是相等的,其实不是,代码段1没有执行结果,但是代码段2的执行结果为a var ProxySingletonCreateDiv=function(){ var instance="a"; return function(){ alert(instance); } }; ProxySingletonCr
javascript匿名函数传值问题
匿名函数里的对象,跟定义匿名函数页面的上下文有关,而与调用匿名函数的页面无关。很拗口。举例说明://在某个“容器”页面 function showWorkSpace(callback, h) { var height = 500; callback("map_workspace",height); } //在该“容器”页面中的某个iframe页面 parent.showWorkSpa
函数作为返回值/匿名函数/装饰器
1.函数作为返回值 一个函数可以返回一个计算结果,也可以返回一个函数。 返回一个函数时,牢记该函数并未执行,返回函数中不要引用任何可能会变化的变量。 2.关键字lambda表示匿名函数,冒号前面的x表示函数参数 例子 list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9])) 3.装饰器,就是在一
JavaScript事件监听匿名函数的this问题
Javascript的 this指针,是 js 中一个很有意思的问题。不同的上下文有着不同的 this。其实 this和好理解。通俗的说,谁的里面干了什么,this就指向那个谁。造成 js 中 this 虚无缥缈的本质,是 js 中充斥了大量的简写。恰恰是这些 “罪恶”的简写,让这个谁。变得模糊。直观的表现就是,this变得难以捉摸。本质上还是那个 谁 。 this 在四种情况下,会变得神秘
js 函数中的 return+匿名函数
今天一个刚学js的朋友给了我一段代码问为什么方法不执行,代码如下: 代码如下: function makefunc(x) {   return function (){    return x;   }  }  alert(makefunc(0));    结果是:function (){return x;}不是0 不是脚本写错了,只是没搞懂return,从当前函数退出,并从那个函数返...
匿名函数和作用域
匿名函数: 也叫lambda表达式 1.匿名函数的核心:一些简单的需要用函数去解决的问题,匿名函数的函数体只有一行 2.参数可以有多个,用逗号隔开 3.返回值和正常的函数一样可以是任意的数据类型 匿名函数的结构就分为:参数,返回值 他只是个简单的函数,只能替代简单的的函数,复杂的还是直接使用函数了 作用域...
jquery之匿名函数心得
当你开始学习第二种语言的时候,你可能会把你新学习的语言与自己比较熟悉的语言做对比,这样学的更快,更容易让人理解。两年前初次接触JQuery的时候,很是兴奋,因为它打出的口号是:”write less, do more”, 写更少的代码,做更多的事情。最值得让人欣慰的一点也是很多软件设计人员最头疼的事情JQuery帮做了——浏览器兼容问题,还有就是用简单的代码就可实现需要写大量javascript才
Scala 的 "匿名函数"与 "闭包"!
有这样一个函数, 它接受一个函数(或者说闭包)作为参数: object Timer{   def oncePerSecond(callback: () => unit): unit = {     while (true){       callback()       Thread.sleep(1000)     }   }   def timeFlies(): unit
javaScript中匿名函数的传参及赋值
javaScript中匿名函数的传参及赋值var a = (funcion(){})();第一个()中是匿名函数,如果有返回值,则把返回值赋给a; 第二个()中是要给匿名函数传递的参数;var a = (function (){ var i = 1 i++; return i; })(a); console.log(a);//a=1; var b=5; var a = (f
javascript中匿名函数如何自动执行,及其参数的如何传递!
javascript 匿名函数传递 在javascript中匿名函数是是可以自动执行,但是其参数的传递值得我们注意,一般有下面两种形式: 1,直接在函数的后面写参数 (function(a, b) {    alert(a + " and " + b); } )("a", "b"); // 返回"a and b" 2,匿名函数没有形参的时候,可以用arguments来处理:
【JavaScript】方法属性的匿名函数是匿名函数么(附:获取当前执行函数名称的方法)
var ninja = { shout: function(){ console.log("hello"); } }  有些人可能认为,将匿名函数赋值给名为shout的属性也就相当于给它取了名字,其实这是不正确的理解。shout是属性的名称,而不是函数自身的名称。这一点可以通过检查函数的name属性来验证。下面是一些测试实例,请自行思考(前两个均为匿名函数):
匿名函数的this指向
在闭包函数中使用this对象也可能会导致一些问题。我们知道,this对象是在运行时基于函数的运行环境绑定的:在全局函数中,this对象等于window,而当函数被作为某个对象的方法使用时,this等于那个对象。不过,匿名函数的执行环境具有全局性,因此其this对象通常指向window。但有时候由于编写闭包的方式不同,这一点可能不会那么明显。下面看一个例子: var name="window";
js匿名函数作为函数参数
由衷的感叹,js真是烦。 学到现在,渐渐理解了什么是:语言都是通用的,没有好不好,只有擅长不擅长。 继承,多态,甚至指针,c能实现,c++,java有,javascript(和java是雷锋和雷峰塔的区别,名字上不知道坑了多少人)也能变通实现。 温故知新,今天又回味了一遍,匿名函数作为函数参数。 代码很短,五脏俱全。 function t
addEventListener事件监听使用匿名函数作为回调函数的问题
addEventListener事件监听绑定匿名函数,不能用removeEventListener解除绑定,JS认为这不是对应的那个函数。 因此,如果多次执行addEventListener(例如addEventListener事件绑定写在在mousemove事件内),使用匿名函数作为回调函数就是进行了多个函数的绑定,触发事件时会执行多次;具名函数则是绑定的唯一这个函数,触发时只执行一次。...
js 获取外部变量 setInterval 一定要 匿名函数调用
js 获取外部变量 setInterval 一定要 匿名函数调用 或者是 setInterval 获取的外部对象  undefined  ,方法 找不到, 各种灵异找不到、不好使的时候,就要写匿名函数 function test(x) { //setInterval要想获取外部变量一定要通过匿名函数 var b=x; setInterval( function()
Javascript中的回调函数和匿名函数的回调
匿名函数自调的意义: 1.营造了一个封闭的空间 2.防止变量冲突 3.有选择性的对外开发(第三方框架都是对js这样封装的)
ES6 箭头函数: () => {} 与匿名函数 function() {}
function foo() { setTimeout( () => { console.log("id:", this.id); },100); } foo.call( { id: 42 } ); id: 42 function foo() { setTimeout( function() { cons...
匿名函数自调用
什么是匿名函数 Javascript中定义函数的方式有多种,函数直接量就是其中一种。如var fun = function(){},这里function如果不赋值给fun那么它就是一个匿名函数。好,看看匿名函数的如何被调用。 调用方式 1:调用函数,得到返回值。强制运算符使函数调用执行 (function(x,y){ alert(x+y); return...
go语言变参,匿名函数的多种用法
/** * Created by Administrator on 13-12-18. */ package main import ( "fmt" "os" ) func f1(args ...interface {}) { f2(args...) f2(args[1:]...) } func f2(args ...interface {}) { for i, v := ra
javascript 匿名函数与闭包
匿名函数普通函数:function box(){ return 'Lee'; } alert(box());匿名函数://单独的匿名函数 会报错 无法运行 也无法调用 //function() { // return 'Lee'; //}//通过表达式的自我执行 (function() { alert('Lee'); })();//把匿名函数赋值给变量 var cat
js中匿名函数和箭头函数的this指向
匿名函数最经典的总结:就是谁调用匿名函数,匿名函数中的this就指向谁;匿名函数是有执行上下文,只是执行上下文是执行的时候传递过来,箭头函数中的执行上下文是父级的执行上下文,匿名函数可以作为箭头函数的父级(详见例3) 例1.匿名函数 var name='window'; var obj = { name:'obj', nameprintf:function(){ ...
匿名函数的调用方式+自执行函数
匿名函数的调用方式 //1:报错 // function(x){ // return x // }(5); //2:不会执行 function foo(){ /* code */ }( 1 ); //3:匿名函数的第一中调用方式:正常执行 var aa = function(x){ return x }(5...
C# 匿名函数
匿名函数与委托有着密切的关系。   1、为什么要用匿名方法,什么时候用?     当用常规的委托调用方法时使代码很混乱或者不简洁的时候,可以使用匿名方法(内联代码块定义)。什么意思呢,我们用委托调用方法时,是根据方法名调用的,当需要待用的方法很多时,我们创建很多的方法,但是很多方法又不常用,现在我们可以用匿名方法代替。     例如,我直接用我上篇博客“委托”中的例子(根据学生的
js之匿名函数及其应用
通常我们在引入jquery时,或者引用js插件时经常看到开头有一些让人很难以理解的js代码,如果不理解清楚,会对阅读插件源码进行高阶编程造成障碍。 比如,jquery源码中 (function( global, factory ) {  //jquery内容 window.jQuery = window.$ = jQuery;
重温:Javascript的匿名函数和匿名类,以及原生类
1.关于匿名类     var  class1={p1:value1,p2:value2};     这个也可以写成     var class1={};      class1.p1=value1;      class1.p2=value2; 首先所有的匿名类都是继承与Object核心对象的,var class1={} 意味着实例化了一个Object对象,它
Scala学习第六弹:函数与匿名函数
一、函数是第一等公民 Scala中,函数上升和变量同等的位置,或者说函数也是一种变量。 Scala中的函数可以作为实参传递给另一个函数; 函数可以作为返回值; 函数可以赋值给变量; 函数可以存储在数据结构之中。 函数如同普通变量一样,也具有类型。 二、函数类型 形式:A=>B A为输入类型,B为输出类型 如Int => String,把整形数变成String类型。
jquery中匿名函数、选择器、方法调用、绑定事件
转载地址: https://blog.csdn.net/ideality_hunter/article/details/77935656 http://www.cnblogs.com/si-shaohua/p/3760286.html https://www.cnblogs.com/devcjq/articles/2283104.html https://blog.csdn.net/m0_...
浅谈Javascript的匿名函数中的this对象
在一般情况下,this对象时在运行时基于函数的执行环境绑定的:在全局函数中,this
php匿名函数,参数及怎么掉的问题,终极大揭秘
laravel中匿名函数使用居多,  不搞清楚匿名函数参数及调用的问题,laravel没法搞,废话不多说,上代码: class Foo { public function f() { echo 'Foo....f'; } } class Too { public function t($name, Closure $c) {
【JavaScript】(5)匿名函数的定义方式、变量的作用域(局部变量,全局变量)
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
JS中的匿名函数的用法及优缺点
JS中的匿名函数的用法及优缺点匿名函数可以有效的保证在页面上写入Javascript,而不会造成全局变量的污染。 这在给一个不是很熟悉的页面增加Javascript时非常有效,也很优美。一、什么是匿名函数?在Javascript定义一个函数一般有如下三种方式: 函数关键字(function)语句: function fnMethodName(x){alert(x);} 函数字面量(Func
python3学习笔记:函数作为返回值&匿名函数lambda
函数作为返回值高阶函数除了可以接收函数作为参数外,还可以把函数作为结果值返回。def lazy_sum(*args): def sum(): ax=0 for n in args:   ax = ax + n return ax return sumf = lazy_sum(1,2,3,4,5) print f # <f
scala 匿名函数
1.匿名函数初探Scala 中定义匿名函数的语法很简单,箭头左边是参数列表,右边是函数体,参数的类型是可省略的,Scala 的类型推测系统会推测出参数的类型。使用匿名函数后,我们的代码变得更简洁了。val numIncOne = (x:Int) => x + 1上面的表达式就定义了一个接受一个Int类型输入参数的匿名函数,使用起来也很简单numIncOne(2)2输入为空的匿名函数val print
搞明白JavaScript中的匿名函数
匿名函数顾名思义指的是没有名字的函数,在实际开发中使用的频率非常高!也是学好JS的重点。 匿名函数:没有实际名字的函数。 首先我们声明一个普通函数: //声明一个普通函数,函数的名字叫fn function fn(){ console.log(&quot;张培跃&quot;); } 然后将函数的名字去掉即是匿名函数: //匿名函数,咦,运行时,你会发现报错啦! function ...
JS中的匿名函数
定义函数的方式有两种,一种是函数声明,一种是函数表达式(匿名函数)。一.函数声明(function 语句)   要使用一个函数,我们就得首先声明它的存在。而我们最常用的方式就是使用function语句来定义一个函数,如:function sayHi(){ alert("hi"); }   当然,你的函数也可以是带参数的,甚至是带返回值的。function abc(x,y){ r
采用自执行的匿名函数解决for循环使用闭包的问题
这篇文章主要介绍了采用自执行的匿名函数解决for循环使用闭包的问题,很简单,但比较实用,需要的朋友可以参考下
js向事件绑定的匿名函数内传递循环控制变量的值
遇到一个需要向匿名函数传递循环控制变量的问题,我受到园子里这篇文章的启发【笔记】js获取当前点击元素的索引,解决了这个问题。现在把代码贴出来,以防止自己忘记。 1 if ($('#labModal').length > 0) { 2 var screenWidth = window.screen.width; 3 var equipList = document
JS 定义并立即执行匿名函数的方法总结
/*最流行的写法*/    (function(){          alert("run!")     })();         /* !号可以有1~正无穷个,所以这一种就可以衍生无数种方式 */    !!!(function(){          alert("run!")     })();         (function(){          alert
js 匿名函数传参
var initSample = ( function() { var wysiwygareaAvailable = isWysiwygareaAvailable(), isBBCodeBuiltIn = !!CKEDITOR.plugins.get( 'bbcode' ); return function(paramId) { var editorElement = CKEDITO
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 关于大数据培训 关于云计算