一道基础的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"