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>
解决方案 »
- 火狐与IE兼容问题 JS代码如何改动?
- javascript onsubmit
- js 能模糊查询码?不能,准确查询也行。
- 一个关于window.open打开窗口的问题(十分奇怪)
- 一个javascript递归函数的问题
- 友情帮忙吧,分都问完了,请教下<BODY onload="Init();" onclick="f_MoveTo()" >这个click事件,当前页面只有很少的一些地方有文字,点击页面中的空白部分不会实行onclick事件,只有在点击有内容的地方才实行
- 改变radiobutton的选中状态
- 超强幻灯片播放 HTC (VBS)
- 十万火急啊,怎样做弹出式菜单啊?
- 急急急!!!
- 为什么两个float数字相加产生了很多小数点
- 存储过程返回两个结果集(两张表),C#如何获取两个结果集的数据
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();