JS基本数据类型浅谈及作用域闭包分析
变量与常量的区别
先上一段代码演示,常量与变量的区别
示例一
let a = 1;
let b = 2;
const c = 3;
a = 5;
c = 6;
console.log(a);/* 打印5 */
console.log(c);/* 报错,const声明的变量无法修改,js中对无法重新赋值的变量称为常量 */
// 将c =6 的重新赋值操作注释掉即可正常运行
结论:变量可以进行重新赋值操作,而常量不行
示例二
let a = 1;
const b = 2;
a++;
// b++;
console.log(a); /* 打印2 */
console.log(b); /* 报错,const声明变量无法进行数值运算 */
结论:常量无法进行数值运算
示例三
let a = '李四';
const b = '张三';
a+=', 你好';
// b+=', 你好';
console.log(a); /* 打印2 */
console.log(b); /* 报错,const声明变量无法进行字符串拼接,注释变量b的操作 */
const c = true;
// c = false;
console.log(c); /* 报错, boolean变量c无法重新赋值 */
const arr = [];
// arr.push(1);
console.log(arr); /* 打印 [1],说明数组新增成功,得出引用数据类型可以进行新增操作 */
// arr = [1, 2];
console.log(arr); /* 报错,const声明变量无法重新赋值 */
结论:基本数据类型时,const声明的常量无法做任何赋值、增删操作,引用数据类型时,重新赋值操作无法进行,但是可以对引用数据类型变量进行增删操作。并且const声明的变量就是常量这句话仅对当前变量数据类型为基本数据类型时正确
Js基本数据类型及函数解析
Js基本数据类型与引用数据类型
- 常说的数据类型有6种基础数据类型
实际上常用的时5种为null、undefined、number、string、boolean,第6种为ES6 引入的一种新的原始数据类型,表示独一无二的值,不常用
- 引用数据类型
Object、Array、Date、Function等
引言: 我们一般说Js7种基本数据类型泛指为null、undefined、number、string、boolean、symbol、Object或者是null、undefined、number、string、boolean、object、array两类。
从语言层面来讲,指的是前面7种;
从应用层面来讲,指的时后面7种;(为什么没有Date、Function这些,因为这些引用数据类型本身数据类型都是对象,而相比较而言,数组的应用层面较高,所以我们泛指的时候可以把他带进去)
就像对于外行,PHOTOSHOP和PS是两样东西一样,这7种不管说哪一类都是可以的。
函数的种类与参数类型
函数种类分为三种
1、普通函数
function name() {}
2、匿名函数
cosnt name = fucntion (){}
3、箭头函数
cosnt name = () => {}
参数类型分为形参与实参;
- 指的是函数声明时,函数圆括号内部的参数;
- 指的是函数使用时,函数名后面圆括号内部的参数;
参数声明时不确定函数所需参数个数时,可采用归内参数也叫剩余参数、不定参数,如下:
function name(...args) {};
作用域与闭包的关系与实现
作用域种类
- 全局作用域
- 函数作用域
- 块作用域
作用域是单向的,由外向内传递可以,由内向外不行;
闭包形成的条件
- 父子函数
- 自由变量
- 子函数调用父函数的自由变量,父函数外部调用父函数内部的子函数
闭包函数示例:const countTo = ((a) => {
return () => a++;
})(2000);
console.log(countTo)); // 2000
console.log(countTo)); // 2001
模板字符串与标签函数的使用方式
模板字符串作用
相较于传统字符串与变量拼接更加简洁
传统字符串拼接,示例:
const a = 10;
const b = 15;
console.log(a+'+'+b+'='+(a+b)); // 打印 10+15=25
`
模板字符串拼接,示例:
const a = 10;
const b = 15;
console.log(`${a}+${b}=${a+b}`); // 打印 10+15=25
标签函数
// 模板字符串: 可以使用插值表达式的字符串
// 标签函数,使用模板字符串作为参数的函数
console.log`hello ${10} ${20} ${30} world`;
// 标签函数参数:第一个参数是字符串字面量组成的数组,从第二个参数起,是插值表达式
// 函数total第一个参数strings为字符串字面量组成的数组, 后续参数插值表达式
function total(strings, ...args) {
let res = `${strings[0]}:${args.join()}之和是${args.reduce((p, c)=>p+c, 0)}`;
console.log(res);
}
total`hello${10}${12}${13}${5}`; // 打印hello:10,12,13,5之和是40