包含ajax()

时间:2018-08-20 10:00:16

标签: javascript jquery

我们知道,如果我们多次调用一个函数,则变量不会相互冲突,因为它们具有不同的作用域,例如。 new_var在函数any_function的两次调用中都不同

 function any_function(argument1){
          new_var = argument1;
          alert(new_var);
     }
     
   any_function("hello i am first");
   any_function("hello i am second");
   

但是我有一个执行ajax调用的函数,当我多次调用此函数时,变量new_var会根据上一次调用(调用)进行修改,并且对于所有函数do_ajax()

的调用
        function do_ajax(argument1){
            // var new_var = argument1;
             new_var = argument1;
        $.ajax({
          url : window.location.href,
           success: function(r){   
                       alert(new_var);
                        }                   
        });
    }
        do_ajax("first ajax done");
        do_ajax("second ajax done");

您可以在这里https://codepen.io/nikhilnagpal123/pen/XPrvxa

查看结果

另一个有趣的事情是,如果我将var放在变量new_var之前,那么我会得到预期的结果

https://codepen.io/nikhilnagpal123/pen/oPNvXJ

据此,我可以猜测到变量是如何被修改的,但是对该函数的另一次调用又如何修改该变量,但不应有冲突,它们应该具有不同的作用域,

有人可以解释吗?

更新

对不起,上面的问题有点愚蠢,基本上,当我们在没有var的函数中声明变量时,我们给该函数一个全局范围,并且该变量可以被全局访问

例如。

 function any_function(argument1){
      new_var = "hello";
  }

any_function("hello");

alert(new_var); //global variable, also can be accessed by window.new_var

但是如果我在声明变量时使用var,它将仅具有局部作用域

function any_function(argument1){
      var new_var = "hello";
  }

any_function("hello");

alert(new_var); // can not be accessed globaly `new_var` scope was only limited to function  `any_function` where it was decalred

因此,在上述问题中,当我在声明它们时不使用var时,最后一个ajax调用会修改全局变量,

我有一个错误的想法,那就是当我们不在函数外部声明变量时,它始终在函数内部具有局部范围,在此声明是否使用var都无关紧要还是没有造成整个误解,

感谢用户@Alex和@mplungjan为我弄清楚了。

谢谢!

0 个答案:

没有答案