前言
现如今的大环境也不好,我在面试碰了一鼻子灰之后才明白了学习的重要性。再加上我还是挺喜欢写代码的,也不想离开了这家之后被迫转行。且借着现在这家公司包住,且离家近,平常又不怎么加班的机会之下,索性重新认认真真梳理一边js,css,html等。在这之后,认认真真学习vue,vite等的源码。希望我有机会能一直写代码,不管是前端后端亦或者是什么。也希望明年下一次找工作的时候能有一个好的结果吧,诸君共勉。
我以前倒是细致的看过学过Java,C++,倒是没怎么仔细认真看过js,ts。都是接着c++,java的学习红利来用着js的,这次也细致认真的重新学一遍js。
一、script标签元素
script脚本元素是html规范的一种,主要用于从服务端加载一段js脚本并执行。在这里的话,我们可以了解一下script标签元素的属性(仅展示相对重要的属性):
- async: 表示应该立即开始下载脚本,但不能阻止其他页面动作,比如下载资源或者等待其他脚本加载。
- crossorigin: 配置相关请求的CORS跨域设置。crossorigin="anonymous"配置文件请求不必设置凭据标志。crossorigin="use-credentials"设置凭据标志,意味着出站请求会包含凭据
- defer: 表示脚本可以延迟到文档完全被解析和显示之后在执行。
- src: 表示js脚本的来源
- type: 当前重要的仅有type/javascript跟module2个属性。当type=module时,引入的脚本内部可以使用import跟export
二、var,let与const
var,let,const可以定义js中的变量,但是,let,const只能在es6以及更晚的版本使用。那么,他们的分别呢?
- var声明的变量作用域是函数作用域,而let,const声明的变量是块级作用域。
- var可以重复声明变量,而let跟const则不可以,不允许同一个块级作用域出现冗余声明。
- var声明的变量会自动提升到函数作用域顶部,这也便是所谓的变量提升,也就是把所有的变量声明拉到函数作用域的顶部。而let跟const则不会,但是在解析代码时,javascript引擎也会注意到出现在块后声明的let变量,只是在这之前不能以任何方式引用let,const声明的变量,在let,const声明执行前的瞬间被成为暂时性死区。
- 在全局作用域下声明的var变量会成为window对象的属性,而let跟const声明的则不会。
- 在for循环中,var声明的变量会渗透到循环体外部,而let则解决了这个问题。
- 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个对象完全独立,只是拥有相同的值。
参数传递时,基本类型是把变量的值传递给参数,此后这个参数与变量互不影响。而对象是传递的引用,指向同一个对象。