js基础

251 阅读2分钟

var 存在提升,我们能在声明之前使用。let、const 因为暂时性死区的原因,不能在声明前使用

var 在全局作用域下声明变量会导致变量挂载在 window 上,其他两者不会

let 和 const 作用基本一致,但是后者声明的变量不能再次赋值

首先先来讲下 class,其实在 JS 中并不存在类,class 只是语法糖,本质还是函数。

AMD 和 CMD

AMD 加载完全部在执行
CMD 按需加载 require 


平时有关注 Vue 的进展的话,可能已经知道了在 Vue3.0 中将会通过 Proxy 来替换原本的 Object.defineProperty 来实现数据响应式。 Proxy 是 ES6 中新增的功能,它可以用来自定义对象中的操作。
target 代表需要添加代理的对象,handler 用来自定义对象中的操作,比如可以用来自定义 set 或者 get 函数。

map, filter, reduce

filter 的作用也是生成一个新数组,在遍历数组的时候将返回值为 true 的元素放入新数组,我们可以利用这个函数删除一些不需要的元素

```
    let array = [1, 2, 4, 6]
    let newArray = array.filter(item => item !== 6)
    console.log(newArray) // [1, 2, 4]
```

```
map 作用是生成一个新数组,遍历原数组,将每个元素拿出来做一些变换然后放入到新的数组中。
[1, 2, 3].map(v => v + 1) // -> [2, 3, 4]
```

```
    reduce参数 第一个参数回调函数  第二个参数 初始化的值,若未写取数组[0]中的值;
    回调函数中的参数 
    1 累加器 就是return的值,默认第一次循环取数组【0】,之后如果没有return 就是underfind
    2 当前数组的值
    3 当前值对应的索引
    4 循环的数组
    let arr = ['e', 'l', 'l', 'o'];
    arr.reduce((accumulator, currentValue, currentIndex, array) => {
        console.log(accumulator, currentValue, currentIndex, array);
    });
```

#### 异步问题
```
    ajax(url, () => {
         // 处理逻辑
         ajax(url1, () => {
        // 处理逻辑
         ajax(url2, () => {
        // 处理逻辑
        })
    })

```
回调函数还存在着别的几个缺点,比如

1不能使用 try catch 捕获错误,
2不能直接 return。
3地狱回调 改动一处牵扯大
    async function test() {
     let value = await sleep()
    }

async 和 await 可以说是异步终极解决方案了,相比直接使用 Promise 来说,优势在于处理 then 的调用链,能够更清晰准确的写出代码,毕竟写一大堆 then 也很恶心,并且也能优雅地解决回调地狱问题。当然也存在一些缺点,因为 await 将异步代码改造成了同步代码,如果多个异步代码没有依赖性却使用了 await 会导致性能上的降低。