//1.什么是js?
// 与网页进行交互的脚本语言,有一定的逻辑性
//2.脚本语言的特点
// 1).即写即所得,无须编译,属于解析型
// 2).依赖运行环境 (浏览器,nodejs)
//3.js的组成部分
//1). ECMASCRIPT ES3,ES5,ES7. 定义语法规范
//2). BOM 浏览器对象模型 用js控制浏览器的前进,后退刷新
//3). DOM 文档对象模型 操作页面上元素(div,span,a..)
//4.js如何声明变量
//声明变量必须使用 var
var myname;// 它的初始值是undefined
mynme = "刘德虎";
mynme = 20; //弱类型语言,类型可以随意被修改
//5.变量的命名规则
// 1).只能是数字,字母,下划线,$
// 2).不能是数字开头
// 3).不能是保留字,关键字
// 4).严格区分大小写
// 5).驼峰命名法
// 6).语义化
//6.强制转换与隐式转换
// Number(),
// parseInt()
// parseFloat()
// Boolean()
// String()
// toString()
// 隐式转换
// 除了+以外的 * / - % ,==
//7.值类型与引用类型 (了解)
//值类型,它们都存在在内存的栈中,空间由系统分配
// string,number,bool,null,undefined
// 引用类型
// Object,Array,function,Date...
//存储在堆中,空间由我们分配,系统自动回收
//8.进制转换
//toString(2) 10进制转2进制
//toString(8) 10进制转8进制
//toString(16) 10进制转16进制
//toString(32) 10进制转32进制
//其他进制转10进制
//parseInt(数,进制描述) 结果是10进制
// typeof 检测基本类型 (8个)
// string,number,bool,undefined,bigint,Symbol,function,object
//js的三大流程
//1).顺序
//2).分支
//3).循环 while,do..while,for
//break和continue的区别?
//break可以用在分支和循环中
//break默认结束就近的循环,也可以结束指定某一个循环
// 子分支的switch中防止穿透
// 在循环中,中断循环
//continue只能用在循环中,结束当次循环,不是整个循环
// break和continue相同点:关键字后面的代码不会被执行
//什么是函数?
// 将特点的代码片段抽取成为独立运行的实体,就是函数
//函数的好处
// 代码的复用
// 方便维护和理解
// 使用简单
//函数的创建方式
//函数的默认返回值是undefined,
//如果添加了 return 有值,返回的具体值
// 先定义函数,后使用函数
//1).普通函数
// console.log(fn());
// function fn() {
// return 123
// }
//2).匿名函数
// var fn = function () {
// return 456
// }
// console.log(fn());
//3).构造函数创建函数 (了解)
// function fn(a, b) {
// return a + b;
// }
// var fn = new Function("a", "b", "c", "return a+b+c;");
// console.log(fn(10, 20, 30))
//4. arguments
// 1).它接受动态的实参
// 2).它是一个伪数组
// 3).它只能在函数内部使用
// 4).与数组一样使用,通过下标取值
//5.作用域
// 顾名思义:作用的范围,分为全局与局部
//全局.函数外的变量是全局
//局部.函数内部的是局部
//当全局变量和局部变量同时存在的时候,局部变量优先使用
//6.作用域链
//每个函数都有自己的独立空间,在函数内部找某个变量的时候,
//局部变量优先,如果局部变量不存在,就向外层的作用域查找
//外层没有就向(宿主对象window)上查找,再找不到,就报错
//那么这个查找的过程就叫做作用域链
//7.递归
// 函数自己调用自己,要有零界点(结束条件),死循环无意义
// 递归的使用场景
// 1.快速排序
// 2.多级菜单栏的遍历
// 3.文件磁盘的遍历(nodejs)
// 4. vue里权限菜单的管理
// 递归的性能不高,少用