JS学习笔记(二)

零碎知识点

  • 避免使用浮点数运算
  • ===与 !==对等式两边的数据要求更严格,值与数据类型都要相等
  • ==与 != 会对等式进行强制类型转换
  • 一般把js链接放到html文本的后面,在加载完html文件后在调用js不会导致js堵塞html的加载

JS的运行过程

  • 把代码下载到用户电脑(可能使用到压缩技术)
  • 需要一些信息的时候,会从服务器下载,存储到服务器的一个内存空间中
  • 存在交互的时候,交互代码会被存在另一个不可见的空间,当事件触发的时候,会从内存中调出代码运行

JavaScript的变量提升

console.log(web);
var web = "adsadf";

上面的代码是不会在浏览器中报错的,再代码执行之前js解释器把第二行的声明赋值中的声明提前到了第一行代码前面,因此结果是undefined,同样的,如果变量的声明赋值在if中并不执行,变量的声明一样会被提前。

let与const产生的临时性死区TDC

console.log(web);
let web = "adsadf";
  • 会报错,let不会变量提前,const也是,推荐使用let以及const
  • 同时,块作用域内部var声明的变量会污染到外部的变量,因此同样不推荐使用var
  • const一般使用大写定义变量,在同一个作用域中不可更改,不可重复定义。同时const不可改变的意思是变量指向的内存地址不可改变

作用域与全局污染

  • 函数内部定义的变量覆盖外部的同名变量,内部可以调用外部的变量,函数内部定义的变量外部不可见。
  • 不用var、let、const也可以定义变量,但是容易造成全局污染,尽量使用上述定义方式,添加var、let、const,以及少定义全局变量
  • "use strict"严格模式,表示开发人员一定要声明后使用变量

window对象的重复声明

window对象保存了一些我们使用var定义的变量以及参数,但是其中还包含一些与浏览器相关的属性,如果我们重复声明了同名变量,属性就会被覆盖导致我们无法获取
let不会把变量提升到window

变量冻结

  • **Object.freeze()**函数会冻结变量,禁止一切改变,只读,严格模式下更改冻结变量会报错

传值与传址

let a = 1;
let b = a;

let a = {};
let b = a;

前面传值,后面传址,一般基本数据类型传值。

null与undefined

  • null表示空的引用类型
  • undefined表示空的基本类型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值