zoukankan      html  css  js  c++  java
  • js经典试题之闭包

    js经典试题之闭包

    1:以下代码输出的结果是?

    function Foo(){
         var i=0;
         return function(){
             document.write(i++);
         }
    }
    var f1=Foo(),
    f2=Foo();
    f1();
    f1();
    f2();
    

    答案:0 1 0

    解析: 这是一个闭包,闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。 
    这里的局部变量i,对f1()来说是全局变量,对f2()来说也是全局变量,但是f1()的i跟f2()的i又是相互独立相互不可见的,f1()每执行一次,f1()的i就加一,f2()每次执行一次,f2()的i就加1,但是相互之间不影响,因此结果是0

    2:以下代码输出的结果是?

    function test() {
    	var n = 4399
    	function add() {
    		n++
    		console.log(n)
    	}
    	return {n:n, add:add}
    }
    var result1 = test()
    var result2 = test()
    result1.add()
    result1.add()
    console.log(result1.n)
    result2.add()
    

    答案:4400 4401 4399 4400

    解析:

    test构成了一个闭包,result跟result2各自有自己的test作用域,所以最后result2.add()结果是4400

    前两个没啥好说的,懵逼点在第三个,这里{n:n}是对变量n里的值进行缓存,而不是本身n这个指针变量,这样生成add的时候n指向的值是多少{n:n}里的值就是多少(这里返回的对象是个深拷贝)

  • 相关阅读:
    《SQL Server 2000设计与T-SQL编程》
    sql语句优化 (转)
    SQL Server优化50法(转)
    (转)SQL 优化原则
    sql 锁
    后台服务标准化运营
    ReactNative For Android 框架启动核心路径剖析
    手机QQ会员H5加速方案——sonic技术内幕
    微信支付商户系统架构背后的故事
    [干货] 有了微信小程序,谁还学ReactNative?
  • 原文地址:https://www.cnblogs.com/momozjm/p/7760102.html
Copyright © 2011-2022 走看看