[ 跟着月影学 JavaScript | 青训营笔记]

34 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 3天

首先开始介绍一下JavaScript是什么?

官方:

JavaScript是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,JavaScript 基于原型编程、多范式的动态脚本语言,并且支持面向对象)、命令式和声明式(如函数式编程)风格。

我个人理解就是一个弱类型语言,基本所有变量都可以用var来定义,学过c语言或者java的同学们应该很清楚强类型语言都要用int float 之类的来指定变量类型。 (当然弱类型语言的方便也为它本上带来了许多问题,比如编译性能或者类型推断等)

关于js高阶函数

高阶函数是指以函数作为参数的函数,并且可以将函数作为结果返回的函数。

有很多函数比如:filter、map、reduce...

函数柯里化就是我们给一个函数传入一部分参数,此时就会返回一个函数来接收剩余的参数。

大概实现代码
function myCurried(fn) {
  return function curry(...args1) {
    if (args1.length >= fn.length) {
      return fn.call(null, ...args1)
    } else {
      return function (...args2) {
        return curry.apply(null, [...args1, ...args2])
      }
    }
  }
}

function sum(a, b, c, d, e) {
  return a + b + c + d + e
}
let resFunc = myCurried(sum)
console.log(resFunc(1,3,4)(1)(23))
//解析:
//1、这里的fn.length获取的是函数传入参数的长度
//2、这里使用递归的思想
关于js代码优化的小技巧

避免全局变量

  • 全局变量挂载在 window 下
  • 全局变量至少有一个引用计数
  • 全局变量存活更久,但持续占用内存

避免全局查找

  • 目标变量不存在于当前作用内,通过作用域向上查找
  • 减少全局查找降低消耗
  • 减少不必要的全局变量定义

全局变量数据局部化 避免循环引用

  • 全局引用值多个对象间存在互相引用
  • 采用字面量替换 New 操作 ,例如 let arr = [ ] 代替 let arr = new Array()
  • setTomeout 替换 setInterval

我个人觉得javascript代码前期入门挺好写的,不过学到后面就会很深奥,要熟练运用js语言就得学会js的底层逻辑代码实现。学会使用代码封装,抽离,会大大加强程序员的工作效率。为以后写框架、造轮子铺垫好坚实的基础!