个性化阅读
专注于IT技术分析

var functionName=function(){}和functionName=function(){}有什么区别?

var functionName=function(){}和functionName=function(){}有什么区别?最近发现项目中的JS代码很多地方都使用这两种方式声明方式,不知道这两者有什么区别?使用这两种方式的原因是什么?方法的优缺点是什么?是否有一种方法用而另一种方法做不到的?例如如下代码:

var fn1 = function(){
    // 函数体代码
 }
 function fn2(){
    // 函数体代码
 }

它们不同的地方在于,fn1是一个函数表达式,和什么普通变量一样,在创建全局执行上下文的时候赋值为undefined,只有全局执行上下文入栈执行的时候才会真正赋值。而fn2是一个函数声明,它在创建全局执行上下文的时候就会初始化并被复制为函数的引用,例如下面的例子:

fn1(); // 创建执行上下文的时候该函数变量值为undefined,所以报错
 var fn1 = function(){
    console.log("fn1");
 }

 fn2(); // 因为已经在全局执行上下文中创建,所以正常执行
 function fn2(){
    console.log("fn2");
 }

另外,你不能有条件地定义一个函数,在if语句块中,无论如何在里面定义的函数都会被创建,如下例子:

if(false){
    function fn3(){
        console.log("fn3");
    }
}
if("fn3" in window){
    console.log("fn3"); // 输出: fn3,说明函数已在全局执行上下文中初始化
}
console.log(fn3); // undefined
fn3(); // 抛出异常:Uncaught TypeError: fn3 is not a function
赞(0)
未经允许不得转载:srcmini » var functionName=function(){}和functionName=function(){}有什么区别?

评论 抢沙发

评论前必须登录!