Js函数表达式

函数定义的方式有两种:一种是函数声明,别一种是函数表达式。函数声明的形式:

function foo(arg0,arg1,arg2){

//函数体

}

首先是函数关键字,然后是函数名字,这就是指定函数名的方式。函数声明的一个重要特征是函数提升,意思是在执行代码之前会先读取函数声明,所以能把函数声明放在调用他的语句后面。

foo();

function foo(){

    console.log("hello world!");

}

//不会报错,因为在代码执行之前会先读取函数声明。

别一种创建函数的方式是使用函数表达式。

var foo = function(){

    var a ="hello!";//私有变量,不能在函数外部访问。

    //函数体

    console.log("hello world!");

}    


<====================================================>

foo(); //错误,函数不存在

var foo = function(){

    console.log('1');

}

<====================================================>

var flag = true;

if(flag){

    function foo(){

        console.log("hello world1!");

    }

}else{ 

     function foo(){

        console.log("hello world2!");

    }

}

表面上看,以上代码表示flag在true时,使用foo定义,否则使用别一个foo定义。实际上,这在ECMAScript属于无效语法,js引擎会尝试修正错误,将其转换为合理的状态。但问题是浏览器尝试修正错误的做法不一致。大部分浏览器会返回第二个声明,忽略flag;而firefox则会返回第一个声明。如果使用函数表达式,则无这种问题。

var foo;

if(flag){

    foo = function(){

        console.log('1');

    }

}else{

    foo = function(){

        console.log('2');

    }

}

不同的函数会根据flag对函数进行赋值。

猜你喜欢

转载自blog.csdn.net/gzkahjl/article/details/80935797
今日推荐