JS变量申明是在编译时候执行,而赋值是在执行时处理,所以下述程序执行的结果不是undefined,而是1.
function box(obj){ var obj; // obj = {name:122} console.log(obj); } var obj = new Object({name:1}); box(obj); console.log(obj.name);
在递归调用时候,如果方法局部变量如上述申明,会导致后续的调用的方法使用前一方法对该变量处理后的值作为变量的初始值。js会只认一个变量申明,执行时是不会对该变量重新分配内存。