js异步理解及return语句

return 语句会终止函数的执行并返回函数的值。
但是只会执行当前函数,如果嵌套多层函数,每一层都需要return才可以
比如:

function test(){
        return 1;
}
console.log(test());     
// 1

function test(){
     (function(){
        return 1;
    })();
}
console.log(test());   
//undefined

//自执行也需要return
function test(){
    return (function(){
        return 1;
    })();
}
//1

参考http://www.cnblogs.com/zmc/p/6916164.html
前两天同事一直问我js异步的问题,因为他写小程序经常遇到,他用promise也解决不了,一直返回undefined。今天写一个功能的时候也卡在这里,查了下资料并认真思考总结下js异步。

最常见的解决方案就是回调函数处理异步,就是传入一个回调函数,等到动作执行成功的时候执行,但是回调函数并不能很好地获取到返回值,也就限制了return关键字的使用。如果我在一个页面里面调用公共js里面的方法,正好这个方法是异步的,我又想要获取到这个异步执行完的值,要怎么获取呢?es6的promise便是最好的解决方法了。下面是一个比较好的理解promise的例子

//如果低版本浏览器不支持Promise,通过cdn这种方式
      

链接:https://www.jianshu.com/p/1f66aca680cb

阮大大说:“Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolve和reject。它们是两个函数,由 JavaScript 引擎提供,不用自己部署。

resolve函数的作用是,将Promise对象的状态从“未完成”变为“成功”(即从 pending 变为 resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;reject函数的作用是,将Promise对象的状态从“未完成”变为“失败”(即从 pending 变为 rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。”

所以注意,promise里面一定要在需要的地方调用resolve函数,不然它的状态是不会从pending自动变为resolved,再回头看看我那位小同事的代码,可不是,写了promise没调用resolve, 当然返回undefined了,ε=(´ο`*)))唉

你可能感兴趣的:(js语法)