JS

Posted kangting

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS相关的知识,希望对你有一定的参考价值。

JS基础-变量类型和计算

javascript数据类型

手写代码之深拷贝

{} instanceof Object中{}被优先识别为代码块问题

javascript toString()

javascript类型转换

JS基础-原型和原型链

原型和原型链
手写代码之jquery

JS基础-作用域和闭包

1.this

this的不同应用场景,如何取值:
当作普通函数被调用
使用call apply bind
作为对象方法被调用
在calss的方法中调用
箭头函数
this的值不是在函数定义的时候决定的,而是在函数执行的时候决定的

手写代码之bind

2.作用域

作用域:变量的合法使用范围
全局作用域:在全局可以使用
函数作用域:只能在函数块中使用
块级作用域(ES6新增):let,const定义的变量有块级作用域{}内部使用

3.自由变量:

1.一个变量在当前作用域没有定义,但是被使用了
2.向上级作用域,一层一层一次寻找,知到找到为止
3.如果到全局作用域都没找到,则报错:xxx is not defined

4.闭包:

所有自由变量的查找,是在函数定义的地方,向上级作用域查找
不是在函数执行的地方查找

闭包的应用场景:
作用域应用的特殊情况,有两种表现:
函数作为参数被传递
函数作为返回值被返回
//函数作为返回值
function create() {
    const a = 100;
    return function() {
        console.log(a)
    }
}
const fn = create()
const a = 200
fn ()  //100


//函数作为参数被传递
function print(fn) {
    let a = 200;
    fn()
}
let a = 100 
function fn() {
    console.log(a)
}
print(fn)  //100
//所有地方自由变量的查找,是在函数定义的地方,向上级作用域查找
//     不是在执行的地方!!

JS基础-异步

1.同步和异步的区别

1.js是单线程语言 
2.同步会阻塞代码的运行
3.异步不会阻塞代码的运行

2.手写用promise加载一张图片

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
  <script>
    function loadImg(src){
      return new Promise((resolve,reject)=>{
        var img=document.createElement(\'img\')
        img.onload=function(){
          resolve(img)
        }
        img.onerror=function(){
          reject(new Error(\'图片加载出错\'))
        }
        img.src=src
      })
    }
    loadImg(\'111\').then((res)=>{
      console.log(\'res\',res)
    }).catch(err=>{console.log(err)})
    </script>
</body>
</html>

3.前端使用异步的场景有哪些
网络请求(ajax加载图片)和定时任务(setTimeout)

以上是关于JS的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段9——JS中的面向对象编程

js代码片段: utils/lcoalStorage/cookie

JS代码片段:一个日期离现在多久了

js常用代码片段(更新中)

js常用代码片段

Chrome-Devtools代码片段中的多个JS库