当前位置:网站首页>JS笔记1
JS笔记1
2022-07-17 00:14:00 【Object not found】
- 当元素没有设置宽高时,如何实现垂直居中显示?
①flex弹性布局
解释:父元素设置宽高大小,子元素不设置
<body><div><span>子元素</span></div></body>
<style>
//父元素增加弹性布局
div
{
display:flex;
width:80%;
height:500px;
flex-direction:row;//设置主轴的方向
justify-content:center;//主轴中子元素的排布方式
align-items:center;//侧轴上中子元素的排布方式
background:
}
div span
{
background:
}
</style>
②定位+transform
<body><div><span>子元素</span></div></body>
div
{
//演示时添加父元素宽高或者只加高度也可以
width:80%;
height:500px;
position:relative;
background:
}
div span
{
position:absolute;
top:50%;
left:50%;
transform:translate(-50%,-50%);
background:
}
③display:table和display:table-cell
注意:
1.display:table-cell会被float和position等属性破坏效果
2.table-cell指的是让标签元素以表格单位格的形式呈现,
vertical-align:用来指定行内元素或表格单位格元素的垂直对齐方式
<body><div><span>子元素</span></div></body>
div
{
//演示时添加父元素宽高或者只加高度也可以
width:80%;
height:500px;
display:table;
}
div span
{
display:table-cell;
//因为是行内元素对齐需要水平和垂直居中哦
vertical-align:middle;
text-align:center;
}
④:before和display:inline-block
<body><div><span>子元素</span></div></body>
div
{
//演示时添加父元素宽高或者只加高度也可以
width:80%;
height:500px;
text-align:center;
}
div::before{
content:””;
height:100%;
vertical-align:middle;
display:inline-block;
}
div span
{
display:inline-block;
}
- var、let、const的区别
- var
①可以跨块访问,不可跨函数访问
当调用函数时创建与赋值,调用后销毁
②如果省略var操作符,意为全局变量
注意:局部作用域中定义全局变量难维护,不推荐
在严格模式下,可能会抛出ReferenceError
③var支持预解析,变量提升(变量或函数声明提升到作用域顶部)
④var定义的全局变量可以挂载到window对象,使用window访问
- let
①只能在块作用域访问,不跨块、跨函数访问
②不能重复声明(冗余声明),只能声明一次
③不会变量提升,当创建后未完成语法绑定(声明),访问会抛出异常ReferenceError,变量到可以访问之间的时间称为暂时死区
④let在全局作用域中声明的变量不会成为window对象的属性
var name=”xx”;console.log(window.name);//xx
var age=18;console.log(window.age);//undefined
⑤for循环中的var、let声明(重要,异步)
- const
①定义常量,声明后一定要赋值(不赋值报错),定义后不可修改(修改报错)
声明对象时,修改对象内部属性不报错
原因:基本数据类型的值储存栈内存,应用数据类型储存栈区的是对象堆内地址,修改对象属性,不修改对象栈区地址,如果重新给对象赋值会报错
②for循环中不适用,循环中迭代变量(变量自增)
如果声明不修改的变量或每次迭代创建新变量,例如:for-in和for-of循环
var | let | const | |
块 | √ | √(只能在块区域) | √(只能在块区域) |
函数 | × | × | × |
声明 | 多次 | 一次 | 一次 |
声明赋值分开 | √(在局部作用域中,声明未var表示全局变量,不推荐) | √ | ×(声明后一定要赋值,否则异常) |
变量提升 | √ | ×(未语法绑定异常) | × |
是否挂载在window | √ | × | × |
for循环 | 全局变量,外部可调用,为最后一次结果 | 局部变量,不可调用 | 同let(如果变量不修改可使用) |
在for循环中var、let案例
for (var i = 0; i < 5; ++i) {
setTimeout(() => console.log(i), 0)
}
// 答案5、5、5、5、5
for (let i = 0; i < 5; ++i) {
setTimeout(() => console.log(i), 0)
}
// 答案0、1、2、3、4
原因:for循环中使用setTimeout异步机制,
①JS单线程环境
单线程指同一时间只能做一件事,所有任务需要排队。
②JS任务分为:同步任务和异步任务
异步任务图解

具体执行步骤如下:
- for循环同步任务执行,产生五个定时器(var是全局变量,遍历完成i=5)
- 同步任务遍历执行后再进行异步任务定时器,输出5个5
- 而let声明变量不是全局变量,for循环成为一个单独的作用域,作用与闭包形成块级作用相同,因此输出0-4
补充:
①for(var i=0;i<5;i++)
{
setTimeout(function(){},console.log(i),i*1000,i);//0,1,2,3,4
}
For(var i=0;i<5;i++)
{
setTimeout(function(){console.log(i);}i*1000);
}
这个问题涉及到console.log与console.log()区别
使用eval()方法,发现console.log是字符串,而console.log()不是
eval(str),接受一个字符串作为参数,如果返回是一个值就返回该值,否则返回undefined
console.log是function函数名,console.log()是同步任务跟for同时执行
而setTimeout()会判断第一个参数是否为function,如果是执行异步任务,不是会当字符串处理,因此console.log(i)会被当作字符串处理(setTimeout里没有回调函数),因此相当于与for循环同步执行操作
补充如果想输出顺序,可以使用let,但是ES6中只支持现代浏览器,考虑兼容推荐使用闭包
或者
①利用setTimeout第三个参数,将i作为参数传递
for(var i=0;i<5;i++)
{
setTimeout(function(i)
{
console.log(i)
},1000,i)
}
②使用IIFE(立即执行的匿名函数)闭包
for(var i=0;i<5;i++)
{
(function(i)
{
setTimeout(function(){
console.log(i)
},1000)
})(i)
}
③立即执行函数
for(var i=0;i<5;i++)
{
(function(i){
setTimeout(function(){
console.log(i);
},1000);
})(i);
}
个人笔记,如有错漏之处,敬请指正
边栏推荐
- Difference between close and shutdown
- 成信大ENVI_IDL第一周实验测试:数组的简单运算+详细解析
- Labelme正常启动,但无法打开
- Dueling DQN的理论基础及其代码实现【Pytorch + Pendulum-v0】
- gdb+vscode进行调试4——gdb执行相关命令
- Gdb+vscode for debugging 4 - GDB executes relevant commands
- gdb+vscode进行调试2——gdb断点相关
- ENVI_IDL:批量拼接Modis Swath的逐日数据并输出为Geotiff格式
- STL--list容器(链表)
- [unity development tips] unity packs the EXE on the PC side and compresses and packs it into an EXE file
猜你喜欢

Opengauss Developer Day 2022 dongfangtong sincerely invites you to visit the "dongfangtong ecological tools sub forum"

DoubleDQN的理论基础及其代码实现【Pytorch + Pendulum-v0】

ENVI_IDL:批量重投影ModisSwath产品(调用二次开发接口)+解析

池式组件之内存池篇

第1章-多智能体系统

池式组件之线程池篇

Double Q-Learning理论基础及其代码实现【Pendulum-v0】

ENVI_IDL:读取OMI数据(HDF5)并输出为Geotiff文件+详细解析

Chapter 2 - system control principle - > classical control theory

Chengxin University envi_ IDL third week class content 1: reading OMI data (HDF5 file) and output + parsing
随机推荐
[tools] Application of SQLite local database in unity3d
【Unity编辑器扩展】快速定位资源和脚本的指定文件和路径
第二讲 BTC-密码学原理(笔记)
【Unity编辑器扩展】Unity内部Asset资源配置ScriptableObject
【HDRP高清渲染管道】创建HDRP工程,把内置管线工程升级为HDRP工程
ENVI_ IDL: read OMI data (HDF5) and output it as GeoTIFF file + detailed parsing
ENVI_IDL:批量重投影Modis Swath产品并指定范围输出为Geotiff格式+解析
【动态规划百题强化计划】1~10(持续更新中)
[unity Editor Extension] the pre-processing and post-processing pictures of unity assets are automatically transferred to sprite2d
[tools] unity screen drawing line, unity screen drawing Hsj drawing tool
Difference between close and shutdown
Zeno paradox 2 Achilles and tortoise
Oozie integrated sh
LeetCode:动态规划中的子序列问题
保留两位小数,并向上取值
成信大ENVI_IDL第一周实验测试:数组的简单运算+详细解析
Memory pooling of pooled components
ENVI_IDL:批量处理Modis Swath数据的重投影并输出为Geotiff格式+详细解析
搭建Sqoop环境
成信大ENVI_IDL第二周课堂内容:打开HDF4文件并读取文件以及简单的数据处理和保存+详细解析