1.函数的递归调用
1)递归调用的本质:就是一个循环
也包括下面这些:
初始变量
增量
结束条件
循环体
函数里面调用自已的函数
function box(){
box ();//这是一个死循环
}
box();
注意:递归不常用
缺点:递归在闭包环境下执行,非常耗费内存资源。也就是代码性能不好。
优点:减少代码量,提高开发效率。
2.递归的应用
3.函数的作用域
(作用域由内部可以访问外部,不能同外部访问内部)
a.在script标签的作用域下的变量都是全局变量
b.在if,for,switch,while这些代码块下,没自己的作用域,它们的作用域处决于在什么环境下执行。
c.全局作用域下的变量是可以在任何地方访问
d.函数内部用var声明的变量是一个局部变量,这个变量的作用域在函数范围。
e.全局作用域下无法访问函数内的局部变量
d.作用域变量访问原则:先在自己的作用域下找,如果找不到,会到上级的作用局找,如果找不到,
再往上,直到根作用域,如果都打不到,程序报错,xx is not defined.,如果找到,就不再往上找。
以上的形式,形成了使用域链。
4.函数和变量提升
1)浏览器的解析引擎,在抓取js的时候,首先找var ,凡是用var声明的变量会被提升到作用域的开头
还会找function ,凡是遇到function时会把function函数整个提升到作用域的开头
2)如果提升了一个同名的变量和函数。优先保留函数。但是函数提升会覆盖原来的提升的函数。(函数提升要比变量提升的优先级要高一些,且不会被变量声明覆盖,但是会被变量赋值之后覆盖。)
注意:函数提升只包括关键字函数;
3)案例:
a.
alert(a); //打印整个函数
function a(){
alert("hello")
}
b.
(函数提升要比变量提升的优先级要高一些,且不会被变量声明覆盖,但是会被变量赋值之后覆盖。)
这个案例展示出来了
alert(a); //undefined function a(){alert(3);}
var a=1;
alert(a); //1
function a(){
alert(2);
}
alert(a); //1
var a=3;
alert(a); //3
function a(){
alert(3);
}
alert(a); //3
c.
牵扯到相关知识:作用域变量访问原则
var a=1;
function fn(){
alert(a);
a=2;//隐形的全局变量
}
fn(); //1
alert(a); //2
d.
var a=1;
function fn(a){
alert(a);
a=2;
//alert(a)
}
fn(); // undefined
alert(a); // 1
e.
var a=1;
function fn(a){
alert(a);
a=2;//这不是隐式的全局变量,定义了形参,相当于var a。
}
fn(a);//1
alert(a);//1
f.
var a=1;
function fn(){
//var a;
alert(a);
var a=2;
}
fn(); //undefined
alert(a);//1
g.
console.log(num); //undefined
var num = 24;
console.log(num); //24
func(100 , 200); //300
function func(num1 , num2) {
var total = num1 + num2;
console.log(total);
}
h.
fn(); //2
function fn() {
console.log(1);
}
fn(); // 2
var fn = 10;
fn(); //报错
function fn() {
console.log(2);
}
fn();
i.
var a = 1;
fn(); // 2
function fn(){
a = a + 1;
console.log(a);
return a;
}
fn();//3
console.log( fn() + 1 ); //4,5
5.js中可以使用的事件有哪些?
1)事件的三要素:
事件源:触发事件的元素。
事件:
事件处理程序:用来达到一个事件操作后实现的某种功能的一段程序代码。
用法:事件源.事件 = 事件处理程序(是一个匿名函数);
2)事件:
鼠标事件:
onclick
ondblclick//双击
onmousedown//鼠标点击
onmouseover//鼠标移入
onmouseenter//鼠标进入
onmouseout//鼠标移出
onmouseleave//鼠标离开
onmousemove//鼠标在元素上移动
oncontextmenu//右击菜单事件
onmousewheel//中间滚轮事件
键盘事件
onkeydown
onkeypress
onkeyup
表单事件
onsubmit
输入框事件
onchange输入框内容改变并且失去光标时触发的事件
onfocus获取焦点事件
onblur 失去焦点事件
容器事件:
onload
onunload
6.事件与函数的关系
事件依赖于函数而存在。
7.事件处理程序:
innerHTML:用来设置或修改元素的内容(包含html标签)
a:处理元素的内容
b:可以处理元素的样式。
c:可以处理元素的属性。
day 06 函数的递归 和函数的作用域以及提升
最新推荐文章于 2022-12-12 23:11:28 发布