day 06 函数的递归 和函数的作用域以及提升

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:可以处理元素的属性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值