「前端基础」JS中with作用疑惑

如下:

<!DOCTYPE html>
<html>
<head>
  <title>debug</title>
</head>
<body>
<script type="text/javascript">
  function foo(obj){
    obj.a=2;
  }

  var o1={
    a:3
  }
  var o2={
    b:1
  }

  foo(o1);
  console.log(o1.a);//2

  foo(o2);
  console.log(o2.a);//2
  console.log(a);//undefined
</script>
</body>
</html>

上面,为什么console.log(o2.a)的结果会是2?

以及如下:

<!DOCTYPE html>
<html>
<head>
  <title>debug</title>
</head>
<body>
<script type="text/javascript">
  function foo(obj){
    with(obj){
      a=2;
    }
  }

  var o1={
    a:3
  }
  var o2={
    b:1
  }

  foo(o1);
  console.log(o1.a);//2

  foo(o2);
  console.log(o2.a);//undefined
  console.log(a);//2
</script>
</body>
</html>

为什么这个的结果中,console.log(a)会是2?

2个月前
回答

第一题中,你给o2添加了a属性,所以,o2.a为2; 第二题里,with不能添加新属性,看结果,你实际上是创造了一个全局变量a,赋值为2,所以a为2。

1个月前评论 0分享
我来回答
无用回答
问题修改记录
暂无修改记录
广告位 点击查看投放指南

我的收藏