javaScript重学之路(一)

80 阅读4分钟

前言

        现如今的大环境也不好,我在面试碰了一鼻子灰之后才明白了学习的重要性。再加上我还是挺喜欢写代码的,也不想离开了这家之后被迫转行。且借着现在这家公司包住,且离家近,平常又不怎么加班的机会之下,索性重新认认真真梳理一边js,css,html等。在这之后,认认真真学习vue,vite等的源码。希望我有机会能一直写代码,不管是前端后端亦或者是什么。也希望明年下一次找工作的时候能有一个好的结果吧,诸君共勉。

        我以前倒是细致的看过学过Java,C++,倒是没怎么仔细认真看过js,ts。都是接着c++,java的学习红利来用着js的,这次也细致认真的重新学一遍js。

一、script标签元素

        script脚本元素是html规范的一种,主要用于从服务端加载一段js脚本并执行。在这里的话,我们可以了解一下script标签元素的属性(仅展示相对重要的属性):

  1. async: 表示应该立即开始下载脚本,但不能阻止其他页面动作,比如下载资源或者等待其他脚本加载。
  2. crossorigin: 配置相关请求的CORS跨域设置。crossorigin="anonymous"配置文件请求不必设置凭据标志。crossorigin="use-credentials"设置凭据标志,意味着出站请求会包含凭据
  3. defer: 表示脚本可以延迟到文档完全被解析和显示之后在执行。
  4. src: 表示js脚本的来源
  5. type: 当前重要的仅有type/javascript跟module2个属性。当type=module时,引入的脚本内部可以使用import跟export

二、var,let与const

        var,let,const可以定义js中的变量,但是,let,const只能在es6以及更晚的版本使用。那么,他们的分别呢?

  1. var声明的变量作用域是函数作用域,而let,const声明的变量是块级作用域。
  2. var可以重复声明变量,而let跟const则不可以,不允许同一个块级作用域出现冗余声明。
  3. var声明的变量会自动提升到函数作用域顶部,这也便是所谓的变量提升,也就是把所有的变量声明拉到函数作用域的顶部。而let跟const则不会,但是在解析代码时,javascript引擎也会注意到出现在块后声明的let变量,只是在这之前不能以任何方式引用let,const声明的变量,在let,const声明执行前的瞬间被成为暂时性死区。
  4. 在全局作用域下声明的var变量会成为window对象的属性,而let跟const声明的则不会。
  5. 在for循环中,var声明的变量会渗透到循环体外部,而let则解决了这个问题。
  6. const跟let的行为基本相同,唯一一个重要区别是const声明变量的同时还必须要同时初始化变量,且尝试修改const声明的变量时会导致运行时错误。但是,这个限制仅针对与它指向变量的引用。如果const声明的是个对象变量,那么修改这个对象内部的属性并不违反const的限制。

三、数据类型

        js当前有7种基本数据类型(number数字型, string字符串类型,boolean布尔值,null空对象指针,undefined未定义,symbol符号类型,bigint大整数),1种引用数据类型(object,function跟array是object的子类型)。

        注意: (typeof null会返回object,因为特殊值null会被认为是对一个空对象的引用。)

        声明变量时,基本数据类型会被分配到栈上,而引用类型会被分配到堆上,栈上只存储引用类型的引用,是该对象在堆内存中的地址。

        复制变量时,引用类型会把引用复制给新对象,也就是说这2个变量指向同一个堆内存中的同一个对象。而基本类型是复制变量的副本,这2个对象完全独立,只是拥有相同的值。

        参数传递时,基本类型是把变量的值传递给参数,此后这个参数与变量互不影响。而对象是传递的引用,指向同一个对象。