说说js作用域
2015-01-12 21:46
162 查看
开始就来说说作用域这个蛋疼的东西。里面可能会出现各种的问题 .先给一个简单的例子大家猜猜结果是什么
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);
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);
相关文章推荐
- JS脚本defer的作用
- "再说说prototype.js的事件注册"
- JS脚本defer的作用
- JS作用域--掌控上下文
- js匿名函数的作用
- js 函数的执行环境和作用域链的深入解析
- 关于ie中iframe中js程序的作用域问题。
- javascript中apply方法和call方法的作用以及prototype.js中的应用
- JS脚本defer的作用
- JS脚本defer的作用
- JS脚本defer的作用
- 关于Js的enevt.cancelBubble的作用
- 说说异或运算^和他的一个常用作用 (转载)
- js脚本简单说说
- 再说说prototype.js的事件注册
- js脚本的defer属性的作用
- javascript中apply方法和call方法的作用以及prototype.js中的应用
- 我来说说TMC(信息采集、系统展示、导航作用等杂谈)
- Js整理备忘(06)——函数基础(二) 作用域与闭包
- js匿名函数的作用