1.9笔记 JavaScript基础(1)

160 阅读2分钟

本节课的思维导图如下:

JavaScript基础(1)思维导图.png

JavaScript历史与版本

JavaScript历史与版本.png

基本数据类型与类型转换

基本数据类型

  • 字符串string
  • 数字number
  • 布尔类型boolean
  • undefined
  • null

判断数据类型的方法:typeof和instanceof

数据类型转换

  • 字符串与别的类型相加会转换为字符串
  • +可以将字符串转化为数字
  • 不建议使用==,会进行隐性类型转换,建议使用===
  • falsy值:flase、0、“ ”、undefined、null、NaN

JavaScript变量

变量声明

  • var

  • let:块级作用域

    同一作用域不能有两个相同名字的变量,内层作用域可以有与外层作用 域同名的变量。

  • const:变量地址不可改变

函数

函数声明

function关键字、参数、返回值

默认参数语法:

//当ab不传入参数,默认值为0,有传入时则为传入值
function addWithDefault(a = 0, b = 0) {
    return a + b;
}

函数声明提升

函数的声明会全部提升到作用域开头进行

函数表达式

//函数表达式,把函数赋值给一个变量
const getSum = function addWithDefault(a, b) {
    return a + b;
}

注意:这种写法不会进行函数声明提升,相当于赋值操作

箭头函数

函数作为值的应用

将函数作为参数:

function binaryOperation(operand1, operand2, func) {
    const res = func(operand1, operand2);
    return res;
}

将函数作为返回值:

//这是一个生成函数的函数(工厂模式的思想)
//抽取出不同的地方,将不同的地方用参数代替
function buildRepeatChar = char => {
    return num => {
        let res = "";
        while(num--) {
            res += char;
        }
        return res;
    }
}

闭包与作用域

函数作用域包含参数和一个块级作用域,参数和外部的变量是独立的,修改参数,外部变量不会变化。

  • 每个函数都会永久“记住”当前函数定义时所在的作用域
  • 函数与其词法环境的引用捆绑在一起构成闭包(closure)

注意:提供闭包的函数的每次被调用,生成的闭包各自独立(而不是同一个闭包),每次调用都有独自的函数作用域,里面的变量并不相通。而闭包函数(返回的函数)每次调用,都是对同一个闭包的操作。这两点要分清。

const buildRepeatCharWIthLog = char => {
    let count = 0;
    return num => {
        count++;
        console.log("第" + count + "次调用");
        let res = "";
        while(num--) {
            res += char;
        }
        return res;
    }
}
​
//下面两个都是第一次调用,生成两个不同的闭包,各自的count都为1
const repeatBar = buildRepeatCharWIthLog('-'); //第1次调用
const repeatExclamatory = buildRepeatCharWIthLog('!'); //第1次调用
​
//闭包函数对同一个闭包,所以count值为2
repeatBar(4); //第2次调用