解析:
变量及常量都是我们用来指定某个特定的数据的名称,如三角形中的三边a、b、c一样。
变量主要有以下两大类型:
原始类型
- 字符串类型
- 数值类型
- 布尔类型
- undefined(声明变量但没有初始化时,变量的类型也是undefined)
- null(object的实例)
引用类型
- 数组
- 对象
- 函数
区别:
命名规则:
let userName = '作者';
let UserName = '作者';
let Bisempty = false;
结合现在大多数人的编写习惯,建议使用驼峰法
普通函数的声明格式为:
function getName(name){
return name;
}
但是匿名函数的声明可以没有函数名称,通常是赋值到某个变量或者直接调用,如:
let sum = function(a,b){
return a+b;
}
普通函数定义之后,可以在代码的任何位置进行调用。如果需要避免这种情况,则可以使用匿名函数,将函数匿名定义赋给某个变量之后,遵从变量必须先定义后使用的原则!
箭头函数本意是用来简化匿名函数的声明。
普通匿名函数声明为
let sum = function(a,b){
return a+b;
}
使用箭头函数简化后的声明为:
let sum = (a,b) =>{
return a+b;
}
当函数体只有一条语句时,还可以进一步简化:
let sum = (a,b) => a + b;
如果只有一个参数,小括号也可以省略,如
let sum = a => 2a;
但是如果没有参数,小括号不可以省略!
注:(1)箭头函数没有原型属性prototype,不能当构造函数用
(2)箭头函数中的this,始终与它的上下文绑定!
闭包原理:能够访问自由变量的函数,自由变量既不是函数参数也不是私有变量,存在于函数调用上下文中。所以理论上来讲,任何函数都是闭包。任何子函数都是闭包
let num = 100 ;
function add(a,b){
let t = 1;
function add2(a,b){
return a+b+t+num;
}
}
以上代码中的num就是一个自由变量,t相对于add()来讲是私有变量,但是相对于add2()来讲,也是一个自由变量,自由变量会暂时存在计算机内存中,不像私有变量一样用完马上消失。所以使用闭包可以访问到函数内部的私有变量,但是某种程度上,也会造成内存浪费。
高阶函数的定义:使用函数作为参数或者将函数作为返回值的函数,四种高阶函数分别如下:
5.1 回调函数,最常用的场景就是事件方法,下面就是把function()作为addEventListener方法的参数
document.addEventListener('click',function(){
alert('hello world');
})
5.2 偏函数:当遇到参数非常多的函数,可以考虑先传递一部分参数,然后把剩下的参数交给函数的返回函数处理。这样就能简化函数参数的声明。
let sum = function(a,b,c,d){
return a+b+c+d;
}
let sum2 = function(a,b){
return function(c,d){
return a+b+c+d;
}
}
let f1 = sum(1,2);
console.log(f1(3,4));
5.3 柯里化:更为极端的偏函数,同样是5.2上面的代码,柯里化之后,可写成以下代码,简化函数参数的调用。
sum = function(a){
return function(b){
return function(c){
return function(d){
return a+b+c+d;
}
}
}
}
console.log(sum(1)(2)(3)(4));
5.4 纯函数:完全独立于调用上下文,返回值只能受到传入的参数影响。如下:
function sum(a,b){
return a+b;
}