zoukankan      html  css  js  c++  java
  • 工作中积累的问题、知识点总结100题(21-40)

    21.非匿名自执行函数

      1.函数名只读

    // b 打印的值是什么
    var b = 10;
    (function b(){
        b = 20;
        console.log(b)
    })()

    解析:

    - 如标题一样,非匿名自执行函数,函数名不可以修改,严格模式下会TypeError,
    - 非严格模式下,不报错,修改也没有用。
    - 查找变量b时,立即执行函数会有内部作用域,会先去查找是否有b变量的声明,有的话,直接复制
    - 确实发现具名函数Function b(){} 所以就拿来做b的值
    - IIFE的函数内部无法进行复制(类似于const)
    打印结果为:Function b

      2.

    //  打印的值
    var b = 10;
    (function b(){
        var b = 20;
        console.log(window.b)
        console.log(b)
    })()
    输出:
    10
    20

      3.

      var b = 10;
      (function b(){
          console.log(b)
          b = 5
          console.log(window.b)
          var b = 20
          console.log(b)
      })()

    22.变量提升(21.10.22 更新)

    var name = 'World!';
    (function () {
        if (typeof name === 'undefined') {
            var name = 'Jack';
            console.log('Goodbye ' + name);
        } else {
            console.log('Hello ' + name);
        }
    })();

    上面得代码相当于

    var name = 'World!';
    (function () {
        var name;
        if (typeof name === 'undefined') {
            name = 'Jack';
            console.log('Goodbye ' + name);
        } else {
            console.log('Hello ' + name);
        }
    })();

      2.看下第二个示例

    var str = 'World!';   
    (function (name) {
        if (typeof name === 'undefined') {
            var name = 'Jack';
            console.log('Goodbye ' + name);
        } else {
            console.log('Hello ' + name);
        }
    })(str);
    
    
    
    
    //Hello World 因为name已经变成函数内局部变量

    23.Switch (2021/10/27)

    // 写一个方法
    
    function showCase(value) {
        switch(value) {
        case 'A':
            console.log('Case A');
            break;
        case 'B':
            console.log('Case B');
            break;
        case undefined:
            console.log('undefined');
            break;
        default:
            console.log('Do not know!');
        }
    }

      1.

    showCase(new String('A'))
    
    
    // 答案是 'Do not know'
    
    
    解析: switch 是严格比较,String 实例 和 字符串不一样
            所以一般情况下,写switch语句的时候,都建议写 default

      2.


    showCase(String('A')) 答案: Case A String('A') 就是返回一个字符串

    24, %运算符

    function isOdd(num) {
        return num % 2 == 1;
    }
    function isEven(num) {
        return num % 2 == 0;
    }
    function isSane(num) {
        return isEven(num) || isOdd(num);
    }
    var values = [7, 4, '13', -9, Infinity];
    values.map(isSane);
     答案:
     
        [true, true, true, false, false]
      解析:
        % 如果不是数值会调用 Number() 去转化
        
            '13'%2    // 1
            Infinity%2    // NaN,Infinity 是无穷大
            -9%2        // -1
            9%-2        // 1,余数的正负号随第一个操作数

          余数和被除数同号

          14 ÷ -3 = -4 ··· 2

          -14 ÷ -3 = 4 ··· -2

          -14 ÷ 3 = -4 ··· -2

         
          -14 ÷ 3 = -4...-2 (余数符号和被除数符号必须相同)
          
        详情解析查看:https://blog.csdn.net/qq_34115899/article/details/79683041
    
    

    25.运算

       1.数组的原型

        Array.isArray(Array.prototype);

        答案:true

        Array。prototype是一个数组,数组的原型是数组,对象的原型是对象,函数的原型是函数

      2.==

        [] == []
    

        答案:false

        两个引用类型,== 比较的是引用地址

      3. == 和 ! 优先级

      [] == ![]
    

        答案:true

        ! 优先级高于 == ,右边Boolean([])是true,取返等于false

        一个引用类型和一个值去比较,把引用类型转化成值类型,左边为0

        所以是在比较 0 == false   答案 true

        

      4.加减运算符,字符串与数字

        '5' + 3
        '5' - 3

        答案: 53   2

        加号有拼接功能,减号是逻辑运算

        巩固: typeof(+'1') // ’number' , 对非数值+-常被用来做类型转换,相当于Number()

        1 + - + + + + - + 1   // 2 , + - 又是一元加减操作符号,数学中的正负号,负负得正。
    

      5.

            var ary = Array(4);
            ary[0] = 22;
         ary[3] = 2323; ary.map(i=>'1')

        答案:['1', empty * 2, '1']

        虽然ary的长度为3,但是存在两个没有内容的,array 上的操作会跳过这些

       6.数组比较大小

        var a = [1, 2, 3];
        var b = [1, 2, 3];
        var c = [1, 2, 3];
    
        a == b;
        a === b;
        a > c;
        a < c;
    

      答案:false  false  false  true

        相等(==)和全等(===)比较的是引用地址,引用间的大小比较是按照字典序比较,先比较第一项,再比第二项...

      7.三元运算符的优先级

       // 计算打印结果 
      var val = 'zhangning';
      console.log('Value is ' + (val === 'zhangning') ? 'aaaaa' : 'bbbbb');

      答案:aaaaa

        字符串拼接比三目运算有更高的优先级

        题意为:'Value is true' ? 'aaaaa' : 'bbbbb'

        而不是:'Value is' + (true ? 'aaaaa' : 'bbbbb')

  • 相关阅读:
    2020/4/29 一场令人头疼的cf。。。
    2020/4/27 日常补坑-tarjan第一道awa
    2020/4/26 2-sat 学习笔记
    SHADEILS--Success History based Adaptive Differential Evolution with Iterative Local Search
    再探动态规划——lettcode689三个无重叠数组的最大和
    学算法——gradient descent
    学算法——particle swarm optimization
    读论文——A study on Artificial Potential Fields
    install libspatialindex on macOS
    Supervised Learning003
  • 原文地址:https://www.cnblogs.com/zhangning187/p/jszjmst21-40zn187.html
Copyright © 2011-2022 走看看