函数的特殊点

今天主要总结了,之前遗漏的问题,函数的特色点
函数名、函数体、函数加载问题
 
1、打印函数名,等于打印了整个函数的代码
2、打印执行函数,等于打印函数的返回值
        a)函数包含函数,先执行内部函数,在执行外部的
  //函数名,就等于函数体
    //执行函数,就等于函数体里面的代码+返回值
    //打印函数名,等于打印整个函数体
    console.log(fu);

    //打印函数执行函数,等于打印返回值
    console.log(fu());//函数中包含函数,先执行里面的函数,在执行外面的函数
    
    function fu(){
        var arr=[1,2,3]
    }
4、js加载函数的时候,只加载函数名,不加载函数体,要想用内部成员,必须调用函数
 
函数的定义方法
 
1、第一种定义方法最强大,定义完毕后,在哪里调用都可以,无位置限制。
2、后面俩种方法是有局限性的,(调用函数必须在定义函数之后)
3、后俩种方法,直接变量名,就是函数执行名,直接在函数体下面调用
 
自定义方法
function fu1(){
            console.log("我是第一种定义方法")
        }

 

匿名函数定义方法(函数声明时不起名,把函数赋值给一个变量的情况,成为匿名函数。)

var fu2=function(){
            console.log("我是第二种定义方法")
        }

 

new function 函数定

var fu3=new Function("console.log('我是第三种定义方法')");

 

变量作用域
 
局部变量
1、只有局部能够访问的变量
2、函数内部用var定义的变量
3、函数执行完毕后,局部变量被回收
 
全局变量(成员变量)
1、在哪里都可以访问的变量
2、在函数内部,直接定义的变量不加var为全局变量,函数必须执行才可以使用   
//函数只加载函数名,不加载函数体
    var num3=111; //全局变量
    function fu(){
        //局部变量
        var num1=222;
        //全局变量
     //所以函数体的全局变量必须执行以后才可以在外部访问的到
         num2=333;
    }
    fu();
   // console.log(num1);//报错
    console.log(num3);
    console.log(num2);

 

隐式的全局变量

 function fu(){
        //b和c是隐式全局变量
        var a=b=c=1;
        //g和f是隐式的全局变量(分号相当于换行)
        var d=1;g=2;f=3;
        //w和e不是隐式的全局变量(逗号是用同一个变量,是局部变量)
        var q=4, w=5, e=6;
    } 

 

  预解析(js解析器在页面加载的时候)
1、首先查看语法错误
2、变量声明提升和函数整体提升
       a)变量声明提升的时候,只提升变量名,不提升变量值
       b)而function直接定义的方法是整体提升。
3、变量声明提升在函数内部照样使用
var aaa;
    console.log(aaa);//空,变量名提升,还没赋值
     aaa=111;
    fn();
    function fn(){
        //空 不注释的时候,变量名提升,var aaa
        //函数的就近原则,那个变量离得近就用那个
      console.log(aaa);
      var aaa=222; //用他自己的
    }

 

案例题

f2();//结果:9 9 报错 9 9 9
    console.log(cc);
    console.log(bb);
    console.log(aa);
    f2();//结果 前三个报错,999,因为函数执行之前还没定义变量
    function f2(){
        var a=b=c=9;
        console.log(aa);
        console.log(bb);
        console.log(cc);
    }

 

//需求:封装一个函数,求斐波那契数列的n项
        function fu(num){
            var num1=1;
            var num2=1;
            for(var i=3; i<=num; i++){
                var eype=num2;
                num2=num2+num1;
                num1=eype;
            }
            return num2;
        }
        console.log(fu(12))

 

 

转载于:https://www.cnblogs.com/wdz1/p/7326881.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值