为什么我的函数没有执行我的全局变量?

时间:2012-12-29 19:50:43

标签: javascript

<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函数是否覆盖了全局范围内的变量。

3 个答案:

答案 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是邪恶的

don't use it

如果删除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.