js 变量命名规范:字母、数字、下划线 _ 、美元符号$(不能以数字作开头)
变量的特点:
1.可重新声明;
3.可重新赋值;
4.可只声明,无赋值,返回值为undefined;
常量的特点:
1.一旦声明则无法改变的量;
2.声明必须赋值;
3.不可重新赋值;
4.不可重新声明;
例如:
// 1.变量
// 只声明:
let test1;
console.log(test1);//undefined
// 声明并初始化:
let test2 = 2;
console.log(test2);//2
// 更新
test1 = 1;
console.log(test1);//1
// 2.常量:
//const testa ;//会报错
const testb =188;
console.log(testb);//188
testb = 999;//常量的值不可以更新,所以会报错
1.因为js代码是从上到下执行,所以无法在一个变量的声明前面访问这个变量,但是函数可以,也就是函数无论在任何地方都会跑到最前面去,这叫函数的提升,只要声明,就可以自动提升到顶部
2.js中的函数可以重写,在其它语言中不存在
1.匿名函数是直接把一个函数赋值给一个变量/常量
2.匿名函数可以避免函数的提升
3.如果把匿名函数赋值给一个常量,那这个匿名函数将无法被改写
1.箭头函数是用来简化匿名函数的语法糖,将普通函数的“function”关键字和函数名都删掉,并使用“=>”连接参数列表和函数体
基础语法:
(arg1,arg2)=>{function body};
2.如果只有一条语句,可以省略函数的”{}”:
let add = (num1,num2)=>num1+num2;
console.log(add(55,33));//88
3.如果只有一个参数可以连()都省了,如果没有参数,则要保留():
let echoName = name => `我的名字是${name}`;
console.log(echoName('Jasper'));//我的名字是Jasper
1.全局作用域:只要声明在函数之外的都是全局作用域
例如:
let num1 = 100;
function add(){
//在函数外声明的变量,可以在函数内使用
return num1;
};
console.log(add());//100
2.函数作用域:函数里面声明的变量叫私有变量,函数内部可以使用,,函数中的私有变量在函数外是无法使用的
例如:
function num(){
let a=0;
};
//在函数中声明的变量在函数外无法使用
console.log(a);//a is not defined
3.块作用域:块作用域由 { } 包括,if语句和for语句里面的{ }也属于块作用域,声明的变量只能在块级作用域里访问
注:var不支持块作用域
4.自由变量:即不是函数参数变量也不是私有变量,存在于函数调用上下文中
5.闭包:能够访问自由变量的函数,有时候需要得到函数内的私有变量,那就在函数的内部,再定义一个函数,并返回
例如:这个aaa()里面返回的子函数,就是闭包了
function aaa(){
let n = 100;
return function () {
return n;
}
}
console.log(aaa()());//100
一个函数中的变量相对于本函数是一个私有变量,但是对于引用它的子函数,就是一个自由变量了:
function aaa(){
let n = 100;
return function () {
return n++;
}
}
let bbb = aaa();
console.log(bbb());//100
console.log(bbb());//101
console.log(bbb());//102
基本定义:使用函数为参数或者将函数做为返回值的函数
1. 回调函数:一个被作为参数传递给另一个函数的函数,例:
//这是一个普通的函数
function say (value) {
alert(value);
}
//下面是一个回调函数
function hdhs(aFun,value){
aFun(value);
}
//运行一下:
hdhs(say,'hello js!');//hello js!
2: 偏函数: 简化了声明时的参数声明
例如:
let mult=function(a=1,b=2){
return function(c,d){
return a*b*c*d;
};
};
let result = mult()(3,4);
console.log(result);//24
3:柯里化:把一个多元参数的函数变成多个一元参数的函数
例如:
let mult = function(a){
return function(b){
return function(c){
return function(d){
return a*b*c*d;
};
};
};
};
let result = mult(1)(2)(3)(4);
console.log(result);//24
4:纯函数:完全独立于调用上下文,返回值只能受到传入的参数影响
例如:
//这不是一个纯函数
function getTimes(){
return new Date().getHours();
}
console.log(getTimes());//返回当前小时
//这就是一个纯纯的函数
function div(valueA,valueB){
console.log(valueA*valueB);
};
div(2,3);//6