函数嵌套和知识点补充
0407
函数的嵌套
知识点补充:
逻辑短路:如果第一个条件已经能够决定整个表达式的结果,那么第二部分就不执行
&& 第一个条件为false的时候短路
|| 第一个条件为true的时候短路
例如:
var a = 10 var b = 0 a > 10 && b === 0 a>10 //false, //所以整个表达式结果已经false了,所以后面b===0 //这个条件就不会再去判断了 a > 0 || b === 0 //当第一个条件为true的时候,整个表达式已经是true了,所以 //第二个条件就不会再去判断了
三元运算符:也被称为三目运算。
var a = 10
a++ //一元
a + 2 //二元
//判断条件 ? 条件成立的时候执行的代码 : 不成立的代码
例:a > 0 ? console.log(‘大于0’) : console.log(‘小于0’)
或者console.log(a > 0 ? ‘大于0’ : ‘小于0’ )
语句块的大括号:
语句块:if、switch、while、for、(function)
常用语句块里代码如果只有一行,那么大括号可以省略
一般if else、 for有些时候
例:var a = 10
if(a > 0)console.log(‘大于0’);
递归:函数自身的调用,但不能无限调用,得有出口(自己调用自己)
构成递归需具备的条件
1. 子问题须与原始问题为同样的事,且更为简单;
2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理。
由于递归是函数本身一层一层压栈,导致先入栈的不能出栈,空间占满以后就会造成堆栈溢。
匿名函数:没有名字的函数
例:
function () { console.log(123) } var test = function () { console.log(123) } div.onclick = function () { console.log(123) }
IIFE:自调用函数
封装一个函数的同时立马自己调用
写IIFE的时候如果前面的代码没有分号,
那么需要在IIFE前面加上一个分号
例:
;(function () { console.log(123)})()
优点,减少全局变量。节约内存空间
JS运行和编译
语法分析
查找基本语法有没有错误
预解析
执行之前进行预解析
var、function关键字提前到当前作用域的顶部,变量默认值为undefined,函数默认值为函数体代码块,
当函数与变量重名时,保留函数。
解释执行
变量提升:
例:
//把var声明的变量提升到当前作用域的顶部,只提升声明,不提升赋值 console.log(a) var a = 10 // 上面两行代码完成变量提升之后相当于下面这三行 var a console.log(a) a = 10 // 变量提升是提升到当前作用域的顶部
变量提升是提升到当前作用域的顶部
函数的提升:function关键字声明的函数会提升整个函数体到当前作用域的顶部
事件:
常用的鼠标事件
click 鼠标点击
dbclick 鼠标点击两次触发的事件
mousedown 鼠标按下时显示的事件
mouseup 鼠标抬起时显示的事件
mouseout 鼠标移入时显示的事件
mouseover 鼠标离开时显示的事件
out和over这一对在盒子的子元素之间穿过的时候也会反复触发,而enter和leave只在进出盒子时触发一次
mouseenter 鼠标进入时显示的事件
mouseleave 鼠标离开时显示的事件
mousemove 每动一次都会触发一次move