首页 > JavaScript函数定义语法var fn = function() {} 和 function fn() {}的区别。

JavaScript函数定义语法var fn = function() {} 和 function fn() {}的区别。

在维护和编写代码的时候,经常会遇到如下两种定义函数的方式,不知道这两种函数声明有什么区别?

var functionOne = function() {
    // Some code
};

function functionTwo() {
    // Some code
}

这两种是有区别的,一种是函数声明,一种是函数表达式。
函数声明:

funName()//正常执行
function funName(){
    //code
}

函数表达式:

funName()//报错
var funName=function(){
    //code
}

解析器在向执行环境加载数据时,对这两种是有区别的,解析器会率先读取函数声明,以确保在执行任何代码之前可以访问,而函数表达式,则必须等到解析器执行到他所在的代码才会被真正执行。
另外除了这一点区别,函数声明与函数表达式的语法其实是等价的。
至于使用哪种就看题主自身的情况来决定,比如:

if(flag){
    function sayHi(){
        alert("Hi");
    }
}else{
    function sayHi(){
        alert("Yo");
    }
}

上面代码希望,在flag为true的时候,调用sayHi时弹出Hi,而false时则弹出Yo,但实际上这在javascript中属于无效代码,大多浏览器会使用第二个函数声明,忽略flag。
可以使用以下写法:

var sayHi
if(flag){
    sayHi=function(){
        alert("Hi");
    }
}else{
    sayHi=function(){
        alert("Yo");
    }
}

这种写法就不会有什么意外,根据flag的不同,sayHi所弹出的内容也会出现变化。
另外这个问题已经问过了,应该尝试自己去搜索,如果找不到再提问
https://.com/q/10...


第一种叫函数字面量,即将一个变量指向一个匿名函数

第二种是声明函数,指定函数名

由于js中存在变量提升,第一种容易引发一些问题,如在定义函数字面量之前就使用该函数,所以推荐使用第二种方法


第一种:函数表达式

第二种:函数声明

基本上没有区别。 使用函数声明的方式会在执行时使之提前。也就是你再代码最下面声明一个函数,在代码开始的位置也可调用到。


如果追究函数或变量方面,大体上说的都一样,意思差不多;我总结得浅显易懂一点:
如果要从头引用就是用 var fn = function (){}来定义;
如果你完成了整个JS,忘记了或者想加入一个变量 fn 来使用,你就可以再后面写
function fn () {...};
我只是在前面那个7.7K添加自己的观点,关键还是得知道前面说的。
新人一个,闻过则喜。

【热门文章】
【热门文章】