js的高阶函数
高阶函数
高阶函数是对其他函数进行操作的函数,它接收***函数作为参数***或将***函数作为返回值***输出
函数作为参数:
<script>
function aa(a,b,fun){
console.log(a+b)
fun()
}
aa(5,6,function(){console.log("我是函数,我是函数的参数")})
</script>
函数作为返回值
闭包:
所谓闭包就是: 闭包就是能够读取其他函数内部变量的函数。
例如:
<script>
function fn(){
const mun=10;
function funs(){
console.log(mun)
}
funs();
}
fn();
</script>
这就是一种闭包
全局变量如何访问局部变量的值呢,我们只需要在局部变量的函数return一个函数出去。就可以访问到局部变量的变量
<script>
function fn(){
const mun=10;
function funs(){
console.log(mun)
}
return funs;
}
var f=fn();
f();
</script>
总而言之:闭包延伸了变量的作用范围
浅拷贝:拷贝地址值
Object.assign(o,obj)//将后面的对象拷贝给前面的对象
看如下代码:
<script>
var obj1={
name:'韦开宇',
age:18,
fun:function(){
console.log("我是obj1的方法")
}
}
var obj2={
}
console.log(obj1)
var result=Object.assign(obj2,obj1);
console.log(obj2)
深拷贝:拷贝数据,变量,函数等等等
`deepCopy(o,obj)`
案例:
<script>
var obj1={
name:'wky',
age:18,
fun:function(){
console.log("我是obj1的方法")
}
}
var obj2={
}
function deepCopy(obj2,obj1){
for(var k in obj1){
var item= obj1[k];
if(item instanceof Array){
obj2[k]= [];
deepCopy(obj2[k],item)
}else
if(item instanceof Object){
obj2[k]= {};
deepCopy(obj2[k],item)
}else{
obj2[k] = item;
}
}
}
deepCopy(obj2,obj1);
console.log(obj2)
</script>
正则表达式
js中正则表达式用于匹配字符串中字符数组的模式,多用于表达的验证
进入正题:
创建简单的正则表达式:
var result=/123/ //只要包含123即可返回true
验证正则表达式:
console.log(result.test("123")) //控制台打印true
正则表达式边界符号:
$ ^
必须是精确的值才返回true
^
:必须以某某值开头
$
:必须以某某值结尾
边界符号$ ^同时使用必须是精确的值才返回true
比如:
var result=/^123$/;
console.log(result.test("123"))//必须输入123才可以返回true
正则表达式字符类:
[]
:表示只包含有其中之一就返回true
比如:
var result=/[123]/;
console.log(result.test("我爱你爱着你,就像老鼠爱大米~~~~~1"))//返回true,因为字符串中包含了一个 1
那么[],$ ,^
三者共用会产生什么情况呢?
var result=/^[abcdef]$/;
console.log(result.test("a"))//必须是a或者b或者c或者d....其中一个才会返回true,否则都为false
只要输入24个英文字母中的其中一个就会返回true怎么做呢??是不是需要些abcdefghij.......z
呢?不需要的,只需要这样a-z
就可以包含a到z
var result=/^[a-z]$/;
console.log(result.test("a"))
字符组合
只要输入,a-zA-Z0-9_-
的其中一个都可以返回true
var result=/^[a-zA-Z0-9_-]$/;
console.log(result.test("a"))
如果中括号中有^
就是取反
只要包含了a-z0-9_-都返回true,多以只能输入A-Z以及其他字符
var result=/^[^a-z0-9_-]$/;
console.log(result.test("A"))
正则表达式量词符
*
:相当于>0
var result=/[a-z*]/;
console.log(result.test("aaaaaaaaaddddd"))//表示a-z你随便则么输,输入都少位数都是true
+
:相当于>n ->> n是自定义长度
?
:只能取0或者1
{3} :只能大于3
{3,} :只能大于3等于3
{3,16} :只能大于3小于16