js基础
- 书写习惯
1.变量 let;常量const;2.定义变量区分大小写;使用小驼峰(userName);定义函数动词+名词(getName);
// 初始化变量;值可以更新
let userName = '黄飞鸿';
console.log(userName);
// 声明必须初始化,值不可以更新
const person = 'hreo';
console.log(person);
3.字符串拼接使用+;值匹配==,数据类型与值匹配===
console.log(100+'100');
console.log(100=='100');
console.log(100==='100');
- 数据类型
1.基本数据类型:Number String Boolean undefined null
const person = 'hreo';
console.log(typeof person);
const a =4;
console.log(a, typeof a);
2.引用类型:Object Array Function
// 1.数组
let arr =[100,'黄飞翔',699];
console.log(arr)
// 判断数组类型使用isarray是数组true;
console.log(Array.isArray(arr))
// 2.对象
let items = {
id:100,
name:'手机',
};
console.log(items);
console.table(items);
// 判断对象类型使用isarrayof是对象true;
console.log(items instanceof Object)
// 3.函数
function show(){
console.log(typeof show)
};
show()
函数详解
- 函数提升与重写
- 高阶函数:回调函数
- 作用域与闭包
1.函数提升,会自动提升到顶部,在任何地方调用都是可以的
console.log(getName('陈'));
function getName(name){
return 'welcome to '+name ;
}
2.匿名函数/函数表达式可以防止函数提升
// function sum(a,b) {
// return a+b ;
// }
// console.log(sum(2,3))
//上文函数转化 匿名函数,sum移动let在后面
let sum = function (a,b) {
return a+b ;
}
console.log(sum(2,3))
3.函数同名会被重写
function getName(name) {
return 'welcome to ' + name;
}
function getName(name) {
return '欢迎 ' + name;
}
console.log(getName('陈'));
4.匿名函数定义为常量不会被重写
const sum = function (a,b) {
return a+b ;
}
console.log(sum(2,3))
5.回调函数(自己不用,给别人调用)
document.addEventListener('click',function(){
alert('你好');
})
6.偏函数(固定值,先运算,后面的放着后面再处理)
let sum = function (a, b) {
return function (c, d) {
return a + b + c + d
}
}
let sum1 = sum(1, 2);
console.log(sum1(3, 4))
7.柯里化(可以简化调用)
let sum = function (a) {
return function (b) {
return function(c){
return function(d){
return a+b+c+d
}
}
}
}
let sum1 = sum(1)(2)(3)(4);
console.log(sum1)
8.纯函数,独立于上下文,返回值只能接受传入的参数影响
function add(a, b) {
console.log(a + b);
}
add(1, 2)
9.箭头函数,不能当构造函数写,与this的上下文绑定
// let sum =function(a,b){
// return a+b;
// }
// console.log(sum(1,2))
sum =(a,b)=>{
return a+b;
}
console.log(sum(1,2))
简化
sum =(a,b)=>a+b;
console.log(sum(1,2))
10.作用域
作用域
// 1.全局作用域,作用所有区域
let a = 'nihao';
console.log(a);
// 2.私有变量
let b = function () {
// 私有变量bb
let bb = 'hello';
// 全局变量a
return a + bb;
}
console.log(b())
// 3.块作用域
{
let A = 1;
const B = 'h';
var C = 66 ;
}
// 只有var可以访问,let,const支持块作用域
console.log(C)
11.闭包(多重return,自我调用)
function f1() {
let a = 1;
// a 相对于f1是私有变量,但是相对于返回的匿名函数就是一个自由变量
return function () {
return a++;
};
}
let f2 = f1();
console.log(f2());
console.log(f2());
console.log(f2());