老师有个问题

老师有个问题

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
 <title>正则表达式</title>
</head>
<body>
<script type="text/javascript">
    function test(){
     var n = 2000;
     function add(){
      n++;
      console.log(n);
     }
     return {n:n,add:add}
    }
 var test1 = test();
 var test2 = test();
 test1.add();
 test1.add();
 console.log(test1.n);
 test2.add();
</script> 
</body>
</html>

为什么这里打印test1.n会是2000,而不是2001

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,test1.n是test作用域下的,但是当第一次执行完test()时,n已经被返回了,并且是2000。再往下执行test1.add()的时候,在test函数内部,程序不会从上往下再执行一遍了,即不会再return一次{n:n,add:add},所以test1.n的值保持了最初的2000。

好帮手慕久久 2020-05-11 14:05:18

同学你好,程序从上往下执行,执行到var test1 = test()时,test1的值就变成了:{n: 2000, add: function add(){n++; console.log(n); }},即test1中n的值是2000(此时没有执行add方法);而在执行test1.add()的过程中,改变的是test1作用域中的n,由于test1中的代码没有从下往下再执行一遍,所以test1.n不变,可对比如下例子:

http://img1.sycdn.imooc.com//climg/5eb8ead4094a5b9305260495.jpg

如果我的回答帮到了你,欢迎采纳,祝学习愉快!


  • 老师,这里test1.n中的n值不是test作用域下的吗
    2020-05-11 16:26:03
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师