# html **Repository Path**: fieemiracle/html ## Basic Information - **Project Name**: html - **Description**: HTML,CSS,Javascript知识巩固. - **Primary Language**: JavaScript - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: https://gitee.com/fieemiracle/html - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-06-16 - **Last Updated**: 2023-04-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 一、脱离文档流的方法: 1、绝对定位 position:absolute 2、浮动 float 3、固定定位 position:fixed 二、分别: #float:left/right/auto 作用: #1、脱离文档流, #2、文本环绕,但是开启浮动的容器的文档流任然占据位置,有文字环绕效果 #3、让块级元素同行显示 #4、使行内元素可改变宽高,行内元素设置了浮动,该元素则变成了内敛块级标签,可以设置宽高 #5、可以使用margin,但是不能使用margin: 0 auto;/*设置浮动后不能生效*/ #6、元素没有宽高时,宽高可以被内容撑开(与正常盒子一样) #position:absolute 作用:脱离文档流,开启绝对定位的容器不占据位置,此时文字没有环绕效果 1、可以使用margin,但是不能使用margin: 0 auto;/*设置浮动后不能生效*/ #position:fixed 作用:脱离文档流 特点:不需要参照物,永远根据浏览器定位 三、清除浮动的方法:(清除浮动的核心理念就是想办法让浮动元素的父元素有高度) #1、给父容器设置高度(不推荐),给浮动元素的父辈容器添加高度 #2、在设置浮动的最后一个元素后面,增加一个子容器,设置clear属性,,使用清除属性clear(内墙元素隔离法) clear:both/left/right #3、使用伪元素清除浮动(推荐),给浮动元素的父辈容器添加伪元素,::after,如下:(内墙元素隔离法升级) ul{ content: ''; display: block/inline-block/table; clear: both; } 使用clear清除浮动的不足: 不足1: 浮动元素的父辈仍然没有高度 不足2: 此时清除元素的margin-top失效,其他三个方向的margin有效 #4、开启BFC容器(推荐),给浮动元素的父辈容器添加 (1)overflow:hidden/auto(非visible的值)(抵消浮动带来的影响) (2)display:inline-block / table-cell/ flex /table(其他含有table) (3)position:absolute/fixed #5、给下面被影响的容器添加clear:both,不足:父辈容器仍然没有高度 四、了解BFC(css2.0) BFC--Block Formatting Context(块级格式化上下文) #概念(范围):一个BFC包含该上下文的所有子元素,但不包含创建了新BFC容器的内部元素 一个元素不能同时处于两个bfc容器 #效果:让处于bfc内部的元素与外部的元素相互隔离,使内外元素的定位(浏览器的渲染位置)不会相互影响 1、重点:解决外边距重叠 2、内部盒子会在垂直方向上一个接一个排列 3、bfc容器在计算高度的时候,会连着浮动元素计算在内,所以可以借助bfc清除浮动 视觉格式化模型--Box #BFC的创建方法: (1) 给开启浮动元素的父辈容器设置浮动,float:left/right (2) 给开启浮动元素的父辈容器开启定位,position:absolute/fixed (3) 给开启浮动元素的父辈容器设置display, 行内块: display:inline-block 表格单元:display:table-cell/table(属性值含有table的都可以) 弹性布局:display:flex (4)给开启浮动元素的父辈容器设置overflow overflow:auto|hidden|overlay|scroll(非visible的值) 五、隐藏的方法 1、display:none 2、opcity:0.5 六、let,var,const的区别 (1)作用域:var 声明的范围是函数作用域,let 和 const 声明的范围是块作用域 (2)变量提升:var 声明的变量会被提升到函数作用域的顶部,let 和 const 声明的变量不存在提升,且具有暂时性死区特征 (3)重复声明:var 允许在同一个作用域中重复声明同一个变量,let 和 const 不允许 (5)window的属性:在全局作用域中使用 var 声明的变量会成为 window 对象的属性,let 和 const 声明的变量则不会 (6)初始化:const 的行为与 let 基本相同,唯一一个重要的区别是,使用 const 声明的变量必须进行初始化,且不能被修改 七、setInterval和setTimeout的区别 (1)setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式 (2)setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式,setTimeout() 只执行一次 八、addEventListener和“on...”的区别 九、柯里化实现 十、防抖节流 十一、dom方法的区别 getElementById()方法是全局方法,所以必须使用document节点; querySelector()方法不是全局方法,可以直接使用它的父容器节点 offsetTop距离父容器顶部的高度 offsetLeft距离父容器左侧的宽度 offsetWidth自己容器的宽度 offsetHeight自己容器的高度 十二、惰性求值 十三、async函数 十四、作用域(重要) 1、引 擎 2、编译器 3、作用域 (1)全局作用域 (2)函数体作用域:隐藏内部实现 (3)块级作用域--let作用域,代码块{},for循环用let时的作用域,if,while,switch --标识符:能在作用域生效的变量。函数的参数,变量,函数名。函数体内部的标识符外部访问不到 --函数声明:function foo(){} --函数表达式 var foo=function(){} --自执行函数 (function foo(){})();自执行函数前面的语句必须有分号;通常用于隐藏作用域 4、作用域链 5、词法作用域:代码在执行之前需要被编译的过程 (1)词法化 规则:--父级作用域不能取子级作用域,但是子级作用域可以调用父级作用域的字符 --遮蔽效应:执行阶段查找作用域是由内到外的,找到第一个就会停止查找 --全局作用域里的全局变量会作用到全局对象(一般是window)上,node端没有window,浏览器有window 6、欺骗词法作用域(让代码性能变差) (1)eval() 让原本不属于某个地方的代码好像原始就存在了那一样。非严格模式下,eval不会创建自己内部的作用域,所以eval(x)里的参数x不是标识符 function foo(str,a){ 'use strict'//严格模式 1 2 eval(str)//欺骗 console.log(a,b);//非严格模式 1 4 } var b=2; foo('var b=4',1); (2)with 当使用with修改一个对象中不存在的属性的时候,这个属性会被泄漏到全局 十五、双飞翼和圣杯(面试必备)--可举例(三列布局,瀑布流) 十六、预编译 #发生在代码执行之前 1、声明提升 console.log(b); var b=123;//undefined 2、函数声明整体提升 test();//hello123 function test(){ var a=123; console.log('hello'+a); } #发生在函数执行之前--四部曲(重要) 1、创建一个AO(Activation Object) 2、找形参和变量声明,然后将形参和变量声明作为AO的属性名,属性值为undefined 3、将实参和形参统一 4、在函数体内找函数声明,将函数名作为AO对象的属性名,属性值予函数体 #发生在全局(内层作用域可以访问外层作用域) 1、创建DO对象 2、找全局变量声明,将变量声明作为GO的属性名,属性值为undefined 3、在全局找函数声明,将函数名作为GO对象的属性名,属性值赋予函数体 十七、作用域链---可以解释为什么内层访问到外层,而外层访问不到内层 #根本原因:根据作用域链,函数执行完毕其内部的数据AO是否会被回收决定了能不能被访问到。 #执行期上下文:当函数执行的时候,会创建一个称为执行期上下文的对象(AO对象),一个执行期上下文定义了一个函数执行时的环境 函数每次执行时,对应的执行上下文都是独一无二的,所以多次调用一个函数会导致创建多个执行期上下文,当函数执行完毕 它所产生的执行期上下文会被销毁。 #查找变量:从作用域链的顶端依次往下查找 #[[scope]]----作用域属性,也称为隐式属性,仅支持引擎自己访问。函数作用域,是不可访问的,其中存储了运行期上下文的结合。 #作用域链:[[scope]]中所存储的执行期上下文对象的集合,这个集合呈链式链接,我们把这种链式链接叫做作用域链