=波波日志 > JavaScript/Ajax > eval JavaScript代码块后变量作用域问题=
eval JavaScript代码块后变量作用域问题
使用eval动态解析string类型的javascript代码时,如果使用了var声明某个变量,则此变量的作用域是根据eval代码块的位置来确定的。
1)在函数体中执行eval时,则var声明的变量作用域在函数体内,超出函数体外无法访问,否则提示未定义错误。此时要在函数体外访问此变量,则string类型代码块需要去掉var关键字,或者用window.变量名的方式来申明变量,使变量变为全局变量,这样在函数体外才能访问。
2)不在函数体中执行eval时,则不论是否使用var关键字来申明变量,此变量的作用域是全局的。
例子如下
1、函数体内执行eval,使用var申明
2、在函数体内执行eval,不使用var申明
3、不在函数体内执行
1)在函数体中执行eval时,则var声明的变量作用域在函数体内,超出函数体外无法访问,否则提示未定义错误。此时要在函数体外访问此变量,则string类型代码块需要去掉var关键字,或者用window.变量名的方式来申明变量,使变量变为全局变量,这样在函数体外才能访问。
2)不在函数体中执行eval时,则不论是否使用var关键字来申明变量,此变量的作用域是全局的。
例子如下
1、函数体内执行eval,使用var申明
+展开
-JavaScript
function x(){
var str="var v=123;";
eval(str)
alert(v)
}
x()//123
alert(v)//错误
var str="var v=123;";
eval(str)
alert(v)
}
x()//123
alert(v)//错误
2、在函数体内执行eval,不使用var申明
+展开
-JavaScript
function x(){
var str=" v=123;";
eval(str)
alert(v)
}
x()//123
alert(v)//123
var str=" v=123;";
eval(str)
alert(v)
}
x()//123
alert(v)//123
3、不在函数体内执行
+展开
-JavaScript
var str="var v=123;";
eval(str)
alert(v)
eval(str)
alert(v)
类别:JavaScript/Ajax 作者:波波 日期:2010-07-05 【评论:0】
暂时没有评论!
发表留言
百度赞助
同类热门博文
- ·AJAX跨域问题解决办..
- ·ajax问题总结
- ·jQuery dataType指定..
- ·ajax+asp.net+mssql..
- ·ajax无刷新上传文件..
- ·ajax对象abort方法
- ·JavaScript代码,变..
- ·fckeditor编辑器在F..
博格Tag
- flash/flex/fcs/AIR(752)
- Asp.Net/C#/WCF(598)
- 操作系统及应用软件(376)
- JavaScript/Ajax(330)
- SQL及数据库(134)
- 黑客技术(115)
- Asp/VBScript(111)
- HTML/WML/CSS兼容/XML(102)
- PHP/apache/Perl(96)
- 网站排名及优化(96)
- 其他(75)
- showbo日志(66)
- lucene.net/分词技术(33)
- 计算机网络(26)
- 机械重工(26)
- C#设计模式(25)
- Google Maps开发(17)
- 日语学习(15)
- Canvas/VML/SVG(13)
- linux(11)
- 游戏开发(8)
- 正则表达式(5)
- Jsp/Java(4)
最新博文
- ·javascript实现html..
- ·Javascript风格要素..
- ·Javascript风格要素
- ·动态加载JavaScript
- ·JavaScript陷阱
- ·ajax技巧
- ·IE对CSS样式表的限制..
- ·什么是Javascript匿..
随机博文
