<script type="text/javascript">
var number = "10";
(function(){
alert(number);
alert(eval('number=22'));
})();
var func = function() {
alert (new Function( 'return (' + number + ')' )());
}
func(); // prints 22.
</script>
首先提醒10
,然后提醒22
,然后提醒22 again instead of 10
。 eval函数是否覆盖了全局范围内的变量。
答案 0 :(得分:4)
不,eval
未在全局范围内执行,但您的本地范围内没有名为number
的变量。所以你正在改变全球的。
你可以通过这个小小的改变看到它:
(function(){
var number; // this will ensure the global number isn't changed
alert(number); // this will print "undefined"
alert(eval('number=22')); // this won't change the global variable
})();
请注意,alert(eval('number=22'));
会返回评估结果,number=22
会返回22
。这就是第二个警报提供22
的原因。
答案 1 :(得分:1)
由于您的本地范围中没有变量,因此更改全局变量。试试下面这个。它将打印100而不是22.
<script type="text/javascript">
var number = 100;
(function(){
var number;
alert(number);
alert(eval('number=22'));
})();
function func() {
alert (new Function( 'return (' + number + ')' )());
}
func();
</script>
答案 2 :(得分:0)
如果删除eval的使用,可能会发生的事情更明显 - 您正在重新定义第一个匿名函数中全局变量number
的值:
var number = "10";
(function(){
number = 22; // this is a reference to the global variable `number`
})();
var func = function() {
alert (new Function( 'return (' + number + ')' )()); // this is another use of eval - don't do this
}
func(); // prints 22 - expected.