变量和常量
变量使用let声明,初始化不用赋值,也可以任意更改值。
常量使用const声明,初始化必须赋值,一旦赋值,之后就不能再更新值
let name;
name=1;
console.log(name);
const a=5;
//再赋值就会报错
a=6;
标识符
- 必须是字母,数字,下划线,$
- 严格区分大小写
- 不得使用关键字和保留字
命名方案:js推荐使用小驼峰式
高阶函数
使用函数为参数或者将函数作为返回值的函数就是高阶函数
1.回调函数
变量类型
- 原始类型:字符串,数值,布尔,underfined,null
判断类型用 typeof 变量名 - 引用类型: 数组,对象,函数
- 判断是否为数组 array.isArray(数组);
- 判断是否为对象
对象名 instanceof Object; - 判断是否为函数
typeof 函数名
document.addEventListener("click",function(){
alert("hello world~");
});
2.偏函数
let sum=function(a,b){
return function(c,d){
return a+b+c+d;
}
}
let f1=sum(1,2);
console.log(f1(3,4));
3.柯里化
//柯里化
sum=function(a){
return function(b){
return function(c){
return function(d){
return a+b+c+d;
}
}
}
}
//简化了调用参数
let res=sum(1)(2)(3)(4);
console.log(res);
4.纯函数
独立于调用上下文,返回值只能受到传入的参数影响
let sum=function(a,b){
return a+b;
}
箭头函数
let sum=function(a,b){
return a+b;
}
//箭头函数用来简化 匿名函数 的声明
let sum=(a,b)=>{a+b};
没有参数则必须有(),只有一个参数可以不写(),返回值只有一条语句可以不写return。
注意:箭头函数没有原型属性 prototype 不能当构造函数用。箭头函数中的this,始终与它的上下文绑定
闭包
js三种作用域:全局,函数,块
//块作用域
{
let a=1;
const B="world";
}
//外部无法调用
console.log(a,B);
能够访问自由变量的函数就是闭包
什么是自由变量?
let num=100;//既不属于参数变量又不属于私有变量就是自由变量
function add(a,b){
//a,b参数变量
//私有变量
let t=0;
return t+a+b+num;
}
子函数就是闭包,闭包就是子函数
function a(){
//n相对于a()是私有变量
let n=10;
// 这个返回的子函数就是闭包
return function (){
return n;
}
}
console.log(a()());
立即执行
就是再函数后跟()
//声明完直接调用
(function sum(a,b){
console.log(a+b);
})(1,2);