• (未完待续)闭包 上下文练习


     1 console.log(parseInt(1e1));
     2 console.log(parseInt('1e1'));
     3 console.log(parseFloat('1e1'));
     4 console.log(isFinite(0/10));
     5 console.log(isFinite(20/0));
     6 console.log(isNaN(parseInt(NaN)));
     7 
     8 
     9 var a = 1;
    10         function f(){
    11             var a = 2;
    12             function n(){
    13                 alert(a);
    14             }
    15             n();
    16         }
    17         f();
    // 闭包2道练习题
    
    // 第1道
    
    let foo = function(){
        let i = 0;
        return function(){
            console.log(i++);
        }
    }
    let f1 = foo();
    let f2 = foo();
    f1();// 0
    f2();// 0
    f1();// 1
    
    // 第2道
    
    let x = 100;
    let y = 200;
    let funA = function(x){
        x += 1;
        let y = 201;
        let funB = function(){
            console.log(x); // 102
            console.log(y); // 201
        }
        return funB;
    }
    let f = funA(101);
    f();

    10
    1
    10
    true
    false
    true

    alert(2);

    JS与很多程序设计语言不同,它不存在大括号级的作用域,但它有函数作用域,也就是说,在函数

    内定义的变量在函数外是不可见的。但如果该变量是在某个代码

    块中定义的(如在某个if 或者 for语句中),它在代码块是可见的-

    在JS中,每个函数都有一个自己的词法作用域 也就是说,每个函数在被定义时。(而非执行时)

    都会创建一个属于自己的环境(即作用域) 

    当你看到 var a =2 可能认为这是一个声明 ,但JS实际上会看成两个声明 

    var  = a    a= 2  

    第一个声明会在编译阶段进行 第二个赋值 声明 

    会被留在原地等待执行阶段 

    先有蛋(声明) 后有鸡(赋值)

    函数优先 变量 

    当函数 可以记住并访问所在的词法作用域时,就产生了闭包,即使 函数是在当前词法作用域之外执行

    在定时器 事件监听器 使用了回调函数  实际上就是在使用闭包 

    (未完待续   )

  • 相关阅读:
    C programming course
    关于时间管理的培训心得
    吴老师,一路好走!
    自己实现Int32Collection(.Net 1.1),以及效率问题的体会
    《C陷阱与缺陷》和《C专家编程》两本书又翻印了
    暂时闲一会,写一点点面试体会吧
    人类没有一件事是值得烦恼的
    EP0N系统中简便可行的光纤保护方法
    越来越不想写代码了
    [转]PON关键技术-通用成帧协议研究
  • 原文地址:https://www.cnblogs.com/ATnTention/p/11503463.html
Copyright © 2020-2023  润新知