js return 如何解释

wanfeng
  • 179
   getUserData = function () {
        $.ajax({
            "type": "get",
            "url": imgJson,
            "async": false,
            "success": function (data) {
                if(data.code==0){
                    res = data.code;
                }else{
                    res = data.data;
                }
            }
        });
        return res;
    };

执行这个方法的时候是 return 返回值;

还是在以下success之后就res全局污染了

"success": function (data) {
                if(data.code==0){
                    res = data.code;
                }else{
                    res = data.data;
                }
            }
回复
阅读 1.7k
2 个回答

两个都对

  1. 你的这个ajax是同步的请求 不是异步 就是说等请求结果返回了之后 代码才能继续执行 所以这里的res就是success执行完成后的结果
  2. 全局污染了, 因为变量没有使用var或者let来声明 就会被声明在全局变量上 所以也是全局污染

如果你把ajax中参数 改下 "async": true, 就看出区别了
那在请求返回之前 全局变量res都是undefined 所以还是getUserData函数返回值是undefined 但是在一段时间后其他地方直接使用res变量的话 还是能获取到值的 不过多少时间后能用 就不确定了

res没有声明过,默认为全局变量。

宣传栏