一道基础的for语句js编译过程

引:一道基础js(出自pplive的一道面试题)

  <script type="text/javascript">
    var msg = "Hello";
    function great(name,attr){
      name = "Nick";
      var greating = msg + name + "!";
      var msg = "welcom";
      for(var i =0;i<10;i++){
        var next = msg + " your id is : " + i*2 + i;
      }
      console.log(arguments[0]);  //A
      console.log(arguments[1]);  //B
      console.log(greating);      //C
      console.log(next);        //D
    }
    great("Tom");
  </script>

  A : arguments[0]:即函数的第一个参数。Nick, 而不是Tom,函数内定义的同名变量会覆盖传入的参数。

  B : arguments[1]:很明显第二个参数undefined.

  C : greating = msg + name + "!";   msg根据作用域的含义,本function未找到,会到父层查找,So msg = "Hello"; ×××× 

    函数里面的所有变量其实都会变量声明提前,上面的

    var msg = "welcom"; 就等于

    var msg ;

    msg = "welcome";  // 所以这里应该是 undefinedNick! 而不是 HelloNick!

  D : var next = msg + " your id is : " + i*2 + i;

    这句,msg = welcome; 至于 i * 2 + i 应该是9*2+9吧?××××   那又想当然的错了,之前已经很多次的了解到,如何让一个数字转换为字符串?   

    如:var a = 123;

      var b = a +"";

      console.log(typeof b);//这里得到 string...说明任何一个变量 加上 一个字符串都会转化为字符串!!!

      所以上面的 next 应该是 "welcome your id is : 189"

原文地址:https://www.cnblogs.com/ywwloveys/p/7752917.html