JavaScript中函数声明与函数表达式的区别详解
什么是函数声明和函数表达式?
JavaScript中的函数有两种定义方式:函数声明和函数表达式。
函数声明是以function
关键字开始的语句,后面跟着函数名称和一堆括号,括号内包含参数列表和函数体。例如:
function sum (a, b) {
return a + b;
}
函数表达式是将函数定义为一个值,这个值可以被分配给一个变量。函数表达式可以是匿名的也可以是具名的。例如:
var sum = function (a, b) {
return a + b;
};
区别1:函数声明会被提升,函数表达式不会
函数声明在任何代码执行前都会被解析和初始化,这意味着你可以在声明函数前调用它。例如:
sum(2, 3); // 5
function sum (a, b) {
return a + b;
}
而函数表达式则不会被提升。例如:
sum(2, 3); // TypeError: sum is not a function
var sum = function (a, b) {
return a + b;
};
在这个例子中,我们试图在函数表达式定义之前调用sum
函数,但是会得到一个TypeError
错误,因为sum
在此时还不是一个函数。
区别2:函数声明的作用域和函数表达式的作用域不同
当我们使用函数声明时,函数会被添加到当前的作用域中。这意味着函数在声明之前和之后都能被访问。例如:
if (true) {
function sum (a, b) {
return a + b;
}
}
sum(2, 3); // 5
在这个例子中,sum
函数被定义在if语句块中,但是在if语句块之外也能够被调用。
而函数表达式则只能在定义之后被调用。例如:
if (true) {
var sum = function (a, b) {
return a + b;
};
}
sum(2, 3); // ReferenceError: sum is not defined
在这个例子中,sum
函数被定义在if语句块中,但是在if语句块之外却无法被调用。
总结
在JavaScript中有两种定义函数的方式:函数声明和函数表达式。区别主要在于函数声明会被提升和作用域的不同。函数声明会被提升至当前作用域的顶部,并且能在声明之前使用,而函数表达式则不会被提升,并且只能在定义之后使用。同时函数声明的作用域也不同于函数表达式,函数声明的作用域是当前作用域,而函数表达式的作用域是函数表达式所在的作用域。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript中函数声明与函数表达式的区别详解 - Python技术站