JS--函数表达式

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

函数声明的方式:是由function关键字,然后是函数名指定函数的方式。(FF、Safari、chrome、opera都给函数指定了一个非标准name属性,通过这个属性可以访问到给定函数指定的名字。)

关于函数声明,有个重要特征就是函数声明提升。意思是在执行代码之前,会先读取函数声明。这就意味着函数执行可以放在函数声明之前执行。

sayHi()

function Sayhi(){

//函数体

}

函数表达式的方式:先说一种常见的写法

var fnName = function() {

//函数体

}

这种情况下创建的函数叫做匿名函数(又叫做拉姆达函数),匿名函数的name属性值为空字符串。

注意:函数表达式和其他表达式一样,在使用前必须赋值,如下(不要这样去做)

fnName()

var fnName = function Sayhi(){

//函数体

}

理解函数提升的关键,就是理解函数声明与函数表达式之间的区别。

下面举一个例子:

if(condition){

function say(){

alert(1)

}

}else{

function say(){

alert(2)

}

}

如上写法,大多数浏览器会返回第二个函数声明,但是FF会在condition为true的时候返回第一个函数声明。这样做是很危险的行为。如果改为以下的写法就可以了。

var say;

if(condition){

say = function (){

alert(1)

}

}else{

say = function (){

alert(2)

}

}

推荐阅读更多精彩内容

  • 第一章: JS简介 从当初简单的语言,变成了现在能够处理复杂计算和交互,拥有闭包、匿名函数, 甚至元编程等...
    LaBaby_阅读 378评论 0 6
  • 这两天看这个理论知识,看的有点小恶心了。。现在稍微总结一下,大体知道的,然后不全的再随着自己的理解往上加。 函数表...
    艾石溪阅读 101评论 0 1
  • 函数声明和函数表达式有什么区别 (*)解析器会率先读取函数声明,并使其在执行任何代码之前可以访问;函数表达式则必须...
    coolheadedY阅读 152评论 0 1
  • 定义函数的方式有两种: (1)函数声明 function functionName(arg0, arg1, arg...
    懒学者爱学习阅读 56评论 0 0
  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 5,611评论 2 17