Function()动态定义的函数,变量作用域问题。
-----------------------------------------
以下代码,在tmp函数中定义了局部变量 a="local",但是在动态函数中输出,为何输出的却是全局变量的值呢?
<script type="text/javascript">
var a="global"
function tmp() {
var a="local";
alert(a); var fn=Function("alert(a);")
//这个动态函数,作用域为何输出的是 全局变量的值呢?
fn();
}
tmp();
</script>
-----------------------------------------
以下代码,在tmp函数中定义了局部变量 a="local",但是在动态函数中输出,为何输出的却是全局变量的值呢?
<script type="text/javascript">
var a="global"
function tmp() {
var a="local";
alert(a); var fn=Function("alert(a);")
//这个动态函数,作用域为何输出的是 全局变量的值呢?
fn();
}
tmp();
</script>
function tmp() {
var a="local";
alert(a);
var fn = function() {
alert(a);
};
var fn = Function("alert(a)");
//这个动态函数,作用域为何输出的是全局变量的值呢?
alert(this.a);
fn();
}
tmp();
这种用法调用了Function类崭新创建了一个对象。而Function的上层是window。所以你在里面访问到的就是window下的全局变量。var fn = function() {}这种方法只是普通的函数定义。fn是其外层对象的一个成员,所以可以访问同属于外层对象的局域变量。
var a="global"
function tmp() {
var a="local";
alert(a);
alert("this.a = "+this.a);
var fn = function() {
alert(a);
};
var fn = Function("alert(a)");
//这个动态函数,作用域为何输出的是全局变量的值呢?
fn();
}
tmp();
</script>
var a="global"
function tmp() {
var a="local";
alert(a);
alert("this.a = "+this.a);
}
tmp();
</script>
var a只是个局部变量而已。而this.a是外层对象的自定义属性。
所以this.a 就是this.a ,而 var a 就是 a 。 <script type="text/javascript">
var a="global"
function tmp() {
var a="local";
this.a="local";
alert(a);
alert("this.a = "+this.a);
var fn = function() {
alert(a);
};
// var fn = Function("alert(a)");
//这个动态函数,作用域为何输出的是全局变量的值呢?
fn();
}
tmp();
</script>
var a = "global var "
function tmp() {
var a = "local var";
this.a="this.a";
alert(a);
alert(this.a);
var fn = function() {alert(a);}; //输出局域变量
// var fn = Function("alert(a)"); //这个动态函数,作用域为何输出的是全局变量的值呢?
fn();
}
tmp();