开始就来讲说做用域这个蛋疼的东西。里面可能会出现各类的问题 .先给一个简单的例子你们猜猜结果是什么函数
var a="b"; function text(){ alert(a);var a="c";alert(a);} text(); 结果就是 a:undefined a:"c"; 为何第一个a 不是"b"了。这个就要说到函数做用域了。他使用的做用范围咱们总结为:函数里面申明的变量是局部的,就只在函数体内部有定义。他们是局部变量,做用域是局部性的。它们只在函数体内部有定义。(注:var a="b"; function text(){ alert(c);var a="c";alert(a);} text();不如说这个你说结果又是什么:结果就是 语法错误 C 没有定义。其实我是这么理解的:又回到上面的那句话了》函数定义的变量值在函数里面才有用:为何第一个例子会是undefined了。就是js在函数执行以前会把做用域内全部用var声明抽到头部统一辈子成。这个确定就是undefined了。)因而咱们又会产生一个问题?为何js没有块级做用域了?我举个列子来讲明一下:var a="b"; if(true){ var a="c"; alert(a); } alert(a); 我任务的答案是 a:"c" a:"b" 但是结果是:a:"c" a:"c" 我产生疑问了这个是为何?若是有块级做用域,明显if语句将建立局部变量name,并不会修改全局name,但是没有这样,因此Js没有块级做用域。function test(flag){ if(flag){ var a="a"; for(var i=0;i<2;i++) ; } alert(i); alert(a);} test(true);结果:2 "a" 这个应该很好理解吧。如今咱们在看看这个例子。function test(flag){ if(flag){ a="a"; for(var i=0;i<2;i++) ; } alert(i);} test(true);alert(a) 答案是什么了。按照咱们上面的理解 :应该是 i:"2",a is not defined 为何是 2 a 去掉了var 他会自动升级为全局变量。下面咱们遗留一个问题 function test(flag){ if(flag){ var a="a"; for(var i=0;i<2;i++) ; } alert(i);} test(true);alert(a) 答案又是什么啊??下面这个例子又是什么了??? alert(a);function test(flag){ if(flag){ var a="a"; for(var i=0;i<2;i++) ; } alert(i);} test(true); spa