zoukankan      html  css  js  c++  java
  • js闭包面试题

    请看以下代码在输出台的输出情况

    答案是4400,4401,4399,4400

     首先,test函数做了什么?test在自己的函数作用域内创建一个变量n,以及一个函数add,这时add就作为一个闭包,它可以在外部访问到test内部的变量n,并对其进行加法。然后test返回一个对象,这个对象有一个n变量以及一个add函数,n变量是test内部的变量n的一个缓存,而add则是test内部add的一个引用。

    然后,我们执行了两次test,并把结果返回给两个变量result,result2,这两个变量所拥有的匿名对象是没有任何关联的,因此result2.add()执行的时候,和result.add()执行的情况一样,返回4400。然后result.add()再次执行,返回4401。需要注意的是,这里result.add()对变量n的改变,并不是对匿名对象内部的那个n进行改变,而是test内部的那个n,前面说过,add仅是对test内部函数的一个引用,它操作的n是和它次作用域相关的n。因此,当我们调用输出result.n的时候,这时候才是访问对象内部的n变量,返回的是未被操作的4399.

  • 相关阅读:
    008 同步
    007 优雅的关闭线程
    006 线程中的join方法
    005 线程ID和线程的优先级
    004 后台线程
    003 Thread的构造
    群发 图片和语音失败原因是 ,返回 content是 null,
    状态,
    Shape Of My Heart
    转码 的状态,嘿嘿,小bug,少了一个 !
  • 原文地址:https://www.cnblogs.com/runhua/p/9598579.html
Copyright © 2011-2022 走看看