说说js做用域

开始就来讲说做用域这个蛋疼的东西。里面可能会出现各类的问题 .先给一个简单的例子你们猜猜结果是什么函数

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

相关文章
相关标签/搜索