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  

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

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

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

    函数优先 变量 

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

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

    (未完待续   )

  • 相关阅读:
    单例模式
    leetcode:Minimum Subarray
    leetcode:Minimum Path Sum
    内存分配以及优化
    完整性检查
    类型定义之可选的一些笔记
    CSS|CSS module
    TS 操作符
    React|虚拟 Dom、render函数、shouldComponentUpdate
    React|常用相关框架
  • 原文地址:https://www.cnblogs.com/ATnTention/p/11503463.html
Copyright © 2011-2022 走看看