JS函数的递归和闭包的注意要点

JavaScript函数表达式——“函数的递归和闭包”的注意要点

函数表达式的基本概念

name属性和函数提升

首先,name属性,通过这个属性可以访问到给函数指定的名字。(非标准的属性)如:

function  People(){};

console.log(People.name);  //People

其次,函数声明提升,意味着可以把函数声明放在调用它的语句后面。如:


sayHi();  //调用函数

function  sayHi(){  //声明函数

    console.log("Hi");

}  //不会报错

使用函数表达式则不可以:

sayHi();

var  sayHi  =  function(){

    console.log("Hi");

}  //报错

创建函数的两种方式,一个是函数声明(如第一种方式);一个是函数表达式(如第二种方式)。第二种函数创建方式创建的函数叫“匿名函数”或“拉姆达函数”,因为function 关键字后面没有标识符。

函数提升的常见错误

需要注意的是,作为对比,下面的两种代码中,第一个是错误的(会导致各浏览器出现不同的问题);第二个才使正确的。代码如下:

var  condition  =  true;

if  (condition){

    function  sayHI(){

        console.log("hi")

    }                                 //欢迎加入前端全栈开发交流圈一起学习交流:1007317281

    sayHI();  //"hello"

}else{

    function  sayHI(){

        console.log("hello")

    }

    sayHI();

}

报错

var  condition  =  false;

var  sayHi;

if(condition){

    sayHi  =  function(){

        console.log("hi")

    };                        //欢迎加入前端全栈开发交流圈一起学习交流:1007317281

    sayHi();

}else{

    sayHi  =  function(){

        console.log("hello")

    };

    sayHi();  //hello

}

没有错误

var  condition  =  true;

if(condition){

    var  sayHi  =  function(){

        console.log("hi")

    };

    sayHi();  //hi

}else{

    var  sayHi  =  function(){

        console.log("hello")

    };

    sayHi();  //hello

}

这里也不会出现问题。出现上面问题的根源就是函数提升,就是函数声明和函数表达式之间的区别所导致的。

给大家推荐一个技术交流学习圈,里面概括移动应用网站开发,css,html,webpack,vue node angular以及面试资源等。获取资料
对web开发技术感兴趣的同学,可以加入交流圈**

猜你喜欢

转载自blog.51cto.com/14145734/2392317
今日推荐