请问以下JS代码会输出什么
var a = 10; (function a() { a = 20; console.log(a); })()
第一眼以为是提升(hoist)的问题,差点搞错。变量名和函数名相同差点踩坑里去
var a = 10; //函数已经在体内找到名为a的了 //因此不会到全局作用域去找全局变量a(var a = 10) (function a() { a = 20; //这里的a是函数名,相当于修改函数a=20,无效 console.log(a); //a是函数名,打印整个a函数体 })()
```
(function add(){ add = 100;//此行代码作废,无效,因为此行代码的意思是要修改函数名,此处是立即执行函数,不允许被修改! console.log(add); })();
(function (){ a = 100;// 此时的a成为全局变量,挂在到window上! console.log(a); })(); console.log(a);//100
var add = 1; function add(){ add = 2; console.log(add);//2 } add();//如果函数带参数,又出现与变量同名的情况,又又是另外的情景了...
var a = 1; function add(a=2){ console.log(a);//2 这地方的a在预解析变量声明提升处理完成后,最后一步会把同名的参数a的值2,赋值给变量a var a = 3; console.log(a);//3 } add(); console.log(a)//1
var a = 1; function add(a){ console.log(a);//88 这地方的a在预解析变量声明提升处理完成后,最后一步会把同名的参数a的值88,赋值给变量a var a = 3; console.log(a);//3 } add(88); console.log(a)//1
var a = 1;
function add(a=1,b=function(){
a = 3;
console.log(a);//3 修改的是参数体内的a!
}){
b();
console.log(a);//1 变量声明提升之后,被同名函数a覆盖,后又被同名参数a覆盖,最终值为1
var a = 10; // 赋值留在了原地,
console.log(a);//10。 function a(){
} }
add();
console.log(a)//1 最外层的a变量