当前位置: 首页 > news >正文

前端知识复习一

1.页面导入样式时,使用link和@import有什么区别?

  • link属于html标签,@import是css提供的。
  • 页面加载的同时,link同时也会加载;@import引用的css等到页面加载完再加载

2.js函数有哪几种声明方式?

表达式声明式两种

  • 函数声明式写法:function test(),这种写法会导致函数提升,所有通过function声明的变量都会被解释器优先编译,不管声明在什么位置都可以调用它,但是她本身并不会被执行。
  • 函数表达式写法:var test = function(){},这种写法不会导致函数提升,必须先声明后调用。
test()//报错 TypeError:test is not a function
var test = function(){console.log("测试")
}
区别
  • 函数声明式变量会声明提前,函数表达式变量不会声明提前
  • 函数声明中的函数名是必需的,而函数表达式中的函数名是可选的
  • 函数表达式可以在定义的时候直接在表达式后面加()执行,而函数声明则不可以
function f00(){console.log('测试声明式')
}()//unexpected tokenvar foo = function(){console.log('测试表达式')
}();//测试
  • 自执行函数即使带有函数名,它里面的函数还是属于函数表达式
(function foo(){console.log('自执行函数')
})();//自执行函数

3.说说对“立即执行函数”的理解

​ JS立即执行函数模式是一种语法,可以让你的函数在定义后立即被执行,这种模式本质上就是函数表达式(命名的或者匿名的),在创建后立即执行。

常见的两种写法
  • 匿名函数包裹在一个括号运算符中,后面跟一个小括号
(function(){//.....
})()
  • 匿名函数后面跟一个小括号,包裹在一个括号运算符中
(function(){//....
}())

注意:

  • 函数体后面要有小括号
  • 函数体必须是函数表达式而不能是函数声明
好处
  • 不必为函数命名,避免污染全局变量
  • 立即执行函数内部形成了一个单独的作用域,可以封装一些外部无法读取的私有变量
  • 封装变量

4.call,bind,apply的区别

apply

apply接受两个参数,第一个参数是this的指向,第二个参数是函数接受的参数(数组形式传入)

改变this指向后原函数立即执行,此方法只是临时改变this指向一次

function fn(...args){console.log(this,...args);
}
let obj = {myname:"张三"
}
fn.call(obj,[1,2]);//this会变成传入的obj,传入的参数必须是一个数组
fn(1,2);//this指向window

当第一个参数为null、undefined时,默认指向window(在浏览器中)

fn.apply(null,[1,2]);//this指向window
fn.apply(undefined,[1,2]);//this指向window
call

call方法的第一个参数也是this的指向,后面传入的是一个参数列表

apply一样,改变this指向后原函数会立即执行,且此方法只是临时改变this指向一次。

function fn(...args){console.log(this,...args);
}
let obj = {myname:"张三"
}
fn.call(obj,1,2);//this会变成传入的obj,传入的参数必须是一个数组
fn(1,2);//this指向window

当第一个参数为null、undefined时,默认指向window(在浏览器中

fn.call(null,1,2)//this指向window
fn.call(undefined,1,2)//this指向window
bind

bindcall很相似,第一个参数也是this的指向,后面传入的也是一个参数列表(这个参数列表可分多次传入)

改变this指向之后不会立即执行,而是返回一个永久改变this指向的函数。

function fn(...args){console.log(this,args);
}
let obj = {myname:"张三"
}
const bindFn = fn.bind(obj);//this也会变成传入的obj,bind不是立即指向需要执行一次
bindFn(1,2);//this指向obj
fn(1,2);//this指向window

5.闭包是什么? 闭包的用途?

​ 如果一个函数用到了它作用域外的函数,那么就称这个变量与这个函数之间的环境为闭包。

​ 能够读取其它函数内部变量的函数,就是闭包。

用途
  • 模仿块级作用域,隔离作用域,不会全局污。

  • 封装私有变量。

  • 储存变量。全局变量可以重复使用,但是容易造成变量污染,局部变量仅在局部作用域内有效,不可以重复使用,不会造成变量 污染

6.重排(回流)和重绘

  • 重绘:某些元素的外观被改变,例如:元素的填充颜色.当一个元素的外观发生改变,但没有改变布局,重新把元素外观绘制出来的过程,叫做重绘。
  • 重排:重新生成布局,重新排列元素。重排也叫回流,简单的说就是重新生成布局,重新排列元素。
  • 重绘不一定导致重排,但重排一定会导致重绘。

7.css的选择器有哪些?

id选择器,类选择器,标签选择器,属性选择器,后代选择器,子代选择器(>),兄弟选择器(~),伪类选择器,相邻选择器(+),伪元素选择器(::before ::after)

http://www.lryc.cn/news/69417.html

相关文章:

  • 低代码赋能生物药企数字化
  • 【计算机视觉】最后显示的CIFAR-100数据集照片很模糊怎么解决?
  • OJ 系统未解决或者有疑问问题:
  • 《游戏编程模式》--优化模式--学习
  • 电脑照片怎么导入苹果手机?三个妙招帮你解决!
  • 换个花样玩C++(13)一文深度全面剖析类构造,析构,赋值运算和移动构造
  • 这是一篇使用ChatGPT生成的关于隐私计算的文章
  • Docker持久化固定容器IP
  • Filter和Interceptor和Aspect
  • maven 项目依赖加载不出来
  • Python collections模块
  • Qt-学习 QJson协议解析
  • Git的安装与连接
  • MySQL5.0完全卸载教程
  • rpm包编译工具rpmbuild使用介绍
  • vue3中使用cherry-markDown步骤
  • 数据建模方法论及实施步骤
  • AUTOSAR知识点 之 COM (一):基础知识
  • 自媒体品牌宣传策略注意哪些,是怎么种草的
  • 网络带宽管理
  • SpringCloud(27. Redis 和 ZK 分布式锁)
  • 运行时栈帧结构与方法调用
  • VSCode +gdb+gdbserver远程调试arm开发板
  • 阿里云大学考试python中级题目及解析-python高级
  • 基于FPGA的车牌识别
  • Qt - 进程/线程 补充进阶
  • spring笔记
  • 最大熵模型
  • 微服务中网关的配置
  • Linux基本指令实现4及热键指令详解