js局部变量和全局变量
2016-07-08 16:35
344 查看
function test2(){ alert ("before for scope:"+i); // i未赋值(并不是未声明!使用未声明的变量或函数全抛出致命错误而中断脚本执行) // 此时i的值是underfined for(var i=0;i<3;i++){ alert("in for scope:"+i); // i的值是 0、1、2, 当i为3时跳出循环 } alert("after for scope:"+i); // i的值是3,注意,此时已经在for scope以外,但i的值仍然保留为3 while(true){ var j = 1; break; } alert(j); // j的值是1,注意,此时已经在while scope以外,但j的值仍然保留为1 if(true){ var k = 1; } alert(k); //k的值是1,注意,此时已经在if scope以外,但k的值仍然保留为1 } test2(); //若在此时(function scope之外)再输出只存在于test2 这个function scope里的 i、j、k变量会发生神马效果呢? alert(i); //error! 没错,是error,原因是变量i未声明(并不是未赋值,区分test2函数的第一行输出),导致脚本错误,程序到此结束! alert("这行打印还会输出吗?"); //未执行 alert(j); //未执行 alert(k); //未执行
因为javascript代码在运行时有预编译和执行两个阶段,在预编译阶段会对函数和变量进行处理,对所有的声明变量会赋值为undefined,对所有的声明函数也会赋值为函数的定义。
var a =1; function test(){ alert(window.a); //a为1,这里的a是全局变量 alert(a); //undefined var a=2; //局部变量a在这行定义 alert(a); //a为2,这里的a是局部变量哦! } test(); alert(a); //a为1,这里并不在function scope内,a的值为全局变量的值
转自:http://www.cnblogs.com/RunForLove/p/4629510.html
相关文章推荐
- js实现精确加减乘除
- 10、JSONP实现Ajax的跨域请求
- 彻底弄懂JS的事件冒泡和事件捕获
- [Sencha ExtJS & Touch] singletap 和 tap的区别
- js 通过感叹号判断变量是否有值
- 使用gulp-uglify压缩js文件
- js中的逻辑与(&&)与逻辑或(||)
- javascript获得滚动条高度
- javascript获得滚动条高度
- .net对json序列化和反序列化
- javascript模版引擎Mustache
- 使用Retrofit通过post提交Json数据
- JS:window.onload的使用介绍
- 编写具有可维护性的JavaScript代码
- Ajax处理XML、HTML、JSON三种数据格式的方法
- JSON对象的stringify()和parse()方法
- JavaScript构造函数和普通函数
- 使用console调试JavaScript(二)
- 使用console调试JavaScript(二)
- js中的ajax经典实例