js代码并不是页面加载时就完全的从第一行开始逐步执行并解析
而是开始执行之前 先进入预解析阶段
在预解析阶段 把使用var和function创建的变量 进行提升 目的时为了更方便使用数据
变量提升规则:
预解析阶段会把var声明的变量进行提升 提升到对应作用域的第一行
变量只提升变量名 不提升赋值
变量提前调用 值为undefined
(全局变量提升到全局第一行 局部变量提升到局部第一行)
函数提升规则
预解析阶段会把function声明的函数 进行提升 提升到当前作用域的第一行 函数提升会提升整个函数 函数的调用不提升
小总结:
函数不调用不执行
函数名就代表了这个函数体 代表了整个函数
就近原则: 如果内部有就不去外部找
两个不嵌套的平级的函数可以使用相同的参数名
匿名函数:
不带函数名字 只有函数声明
function(){}
意义:
作为值存在,给其他变量赋值或者作为参数和返回值使用
函数本身也是一种数据类型(算是引用数据类型的一种)
基本数据类型:
number Boolean String null undefined
Number Boolean String Object undefined(typeof检测出来的数据类型)
function fun(){
}
console.log(typeof fun);//function类型
递归函数:
就是函数自己调用自己
如果没有限定条件 会导致浏览器卡死
所以递归必不可少的就是结束的条件
回调函数:
函数作为参数传给另一个函数
在另一个函数内部 接收到参数的回调本身
然后另一个函数内执行这个回调函数的使用
回调函数的使用:
function js(a,b,callback){
callback(a,b)
}
function add(x,y){
console.log(x+y);
}
function jian(x,y){
console.log(x-y);
}
js(12,6,jian)
js(12,6,add)