这是我参与「第五届青训营 」伴学笔记创作活动的第 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的底层逻辑代码实现。学会使用代码封装,抽离,会大大加强程序员的工作效率。为以后写框架、造轮子铺垫好坚实的基础!