js引用方式
内联脚本
onclick="fn()"// 标签属性调用JS方法
内部脚本
js 代码写在script标签中
外部脚本
用script标签引用外部js文件
定义变量
let变量 声明时便初始化,可以更改
const常量,声明时必须初始化,不能更改
标识符: 字母,数字,下划线,$ //严格区分大小写,不得使用关键字,保留字
命名方式:
驼峰命名法:userName
常量尽量都用大写(书写习惯)
数据类型
基本数据类型
typeof 变量名;// 查看变量类型
字符型:string
数字: number
布尔: true,false
undefined 定义未赋值
null
引用数据类型: 数组,对象,函数
通常只有相同类型的数据运算,结果才有意义
等号尽量写三个,=== :全等的意思,数据类型跟值都相等
函数
声明function 函数名(){}
函数的声明会提前,先调用函数,再写函数代码也能调用;// 将函数赋值给一个变量,就成为了一个函数对象,那就不能提前调用了
函数重写:函数写了两次,后边的会覆盖前一个函数 // 将后写的函数赋值给其他命名的变量
参数:函数内部需要的数据
...arr归内参数,简化形参的声明 // 形参数量多的时候用这种方式
拓展:
实参数量多的时候,可以放在一个数组里面,在调用的时候用 ...函数名 就可以
arguments // 类数组:类似数组,其实是对象
// 属性为:从0递增的正整数,具有length属性
可以用数组的Array.from(arguments)方法将它转换为数组
返回值 // 函数都是单值返回,如果像返回多个值,将结果封装到数组或者对象中
高阶函数: 使用函数为参数,或者将函数作为返回值的函数
回调函数: 将函数作为参数的函数——简化声明时的参数声明
偏函数: 有一部分参数是先传入的
let sum = function (a, b) {
return function(c, d) {
return a + b + c + d;
};
}
let fn1 = sum(1, 2);
console.log(fn1(3, 4));
柯里化:简化了调用参数
sum = function(a){
return function(b){
return function(c){
return function(d){
return a + b + c + d;
}
}
}
}
let res = sum (1)(2)(3)(4);
纯函数:完全独立于调用上下文,返回值只能受到传入的参数影响
箭头函数:简化匿名函数
如果只有一个语句,可不写return // () => {}
如果只有一个参数,可以不写小括号,直接写参数 //参数 => {}
如果没有参数,不能省略小括号
*箭头函数没有原型属性prototype,不能当构造函数用
*箭头函数中的this,始终与它的上下文绑定
作用域
全局,函数,块
全局:声明在函数外
函数:在函数中定义的变量是私有变量
块作用域:{}中定义,只有{}没有function()
闭包
自由变量:既不是函数参数变量,也不是函数私有变量,存在函数上下文
闭包是能够访问自由变量的函数
*闭包是占用内存的,闭包函数返回的结果是存在内存中(一个自加的函数,调用一次,返回值增加1,不会重新从0开始,除非刷新网页)
立即执行函数 IIFE
立即执行:声明完成立即调用的函数,解决变量泄露
(function(a,b){
console.log(a+b);
})(1,2)