• Eloquent JavaScript #03# functions


    1、作者反复用的side effect

    side effect就是对世界造成的改变,例如说打印某些东西到屏幕,或者以某种方式改变机器的内部状态从而影响到后面的语句。

    造成side effect的例子,例如下面的makeNoise 函数:

    const makeNoise = function() {
      console.log("Pling!");
    };
    
    makeNoise();
    // → Pling!

    没有造成side effect的语句:

    1;
    !false;

    2、关于return

    不论是不写还是 返回空return; 结果都是返回undefined

    3、let VS. var

    如果用let和const,那么变量的作用域和java等语言没有什么不同(局部可见性、同名屏蔽全局变量)。

    但是倘若使用var ,那么在括号里定义的变量在括号外也可见:

            <script type="text/javascript">
                let x = 10;
                if (true) {
                    let y = 20;
                      var z = 30;
                      console.log(x + y + z);
                  // → 60
                }
                // y 在这里是不可见的 
                // 强行使用 ReferenceError: y is not defined
                console.log(x + z);
                // → 40
            </script>

     引用知乎张正诚

    使用var声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象;
    使用let声明的变量,其作用域为该语句所在的代码块内,不存在变量提升;
    使用const声明的是常量,在后面出现的代码中不能再修改该常量的值。

    PS. 在2015年之前的JavaScript中,只有函数创建了新的scope。

    4、定义函数的几种方式

    ① 传统方式  ---- let/const f = function(xxxxx) 

    函数本身也是一种值,具备其它值的特征:

    const future = function() {
      return "You'll never have flying cars";
    };

    注意在 } 之后需要分号。

    ‘② 自动变成当前scope(在某个{} 内或者全局)有效,无视定义函数的位置

    console.log("The future says:", future());
    
    function future() {
      return "You'll never have flying cars";
    }

    ③ 省事的写法 ...

    const power = (base, exponent) => {
      let result = 1;
      for (let count = 0; count < exponent; count++) {
        result *= base;
      }
      return result;
    };
    
    const square1 = (x) => { return x * x; };
    const square2 = x => x * x;
    
    const horn = () => {
      console.log("Toot");
    };
    
    let h = a => a % 3;

    5、more...

    经典递归

    返回函数的函数

    调用函数缺少参数自动补为null

    6、Exercises

    计算字符数:

    const countBs = function(x) {
        let count = 0;
        for (let i = 0; i != x.length; ++i) {
            if (x[i] == 'B') count++;        
        }
        return count;
    };
    
    const countChar = (a, b) => {
        let count = 0;
        for (let i = 0; i != a.length; ++i) {
            if (a[i] == b) count++;
        }
        return count;
    }
    
    console.log(countBs("BBC"));
    
    console.log(countChar("kakkerlak", "k"));
  • 相关阅读:
    Selenium Webdriver 自动化测试开发常见问题(C#版)VS
    HTML 和 Body 在 CSS 中的区别
    安装SDK时出现Fetching https://dl-ssl.google.com/android/repository/addons_list-1.xml
    配置好Java和SDK的环境变量后,Javac不是内部命令
    关于adb连接手机offline的问题解决
    CSDN上总结的测试工具排名
    关于性能优化
    关于WAS_1
    IIS服务器搭建
    关于WAS
  • 原文地址:https://www.cnblogs.com/xkxf/p/9109960.html
Copyright © 2020-2023  润新知