zoukankan      html  css  js  c++  java
  • (未完待续)闭包 上下文练习

     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  

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

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

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

    函数优先 变量 

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

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

    (未完待续   )

  • 相关阅读:
    最大公约数
    九宫格
    Hanoi双塔问题(简单的枚举)
    最高分
    盒子
    CodeForces Round #303 Div. 2
    关于“被密码保护”的文章
    【学习】组合数的递推公式
    [FZYZOJ 1821] 一道果题
    [FZYZOJ 1889] 厨房救济
  • 原文地址:https://www.cnblogs.com/ATnTention/p/11503463.html
Copyright © 2011-2022 走看看