eval JavaScript代码块后变量作用域问题
使用eval动态解析string类型的javascript代码时,如果使用了var声明某个变量,则此变量的作用域是根据eval代码块的位置来确定的。
1)在函数体中执行eval时,则var声明的变量作用域在函数体内,超出函数体外无法访问,否则提示未定义错误。此时要在函数体外访问此变量,则string类型代码块需要去掉var关键字,或者用window.变量名的方式来申明变量,使变量变为全局变量,这样在函数体外才能访问。
2)不在函数体中执行eval时,则不论是否使用var关键字来申明变量,此变量的作用域是全局的。
例子如下
1、函数体内执行eval,使用var申明
2、在函数体内执行eval,不使用var申明
3、不在函数体内执行
原创文章,转载请注明出处:eval JavaScript代码块后变量作用域问题
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)
加支付宝好友偷能量挖...
原创文章,转载请注明出处:eval JavaScript代码块后变量作用域问题