JS中两种定义函数方式的比较
in JavaScript with 0 comment

JS中两种定义函数方式的比较

in JavaScript with 0 comment

js中有两种定义函数的方式,函数表达式和函数声明:

// 函数表达式
var functionA = function() {
    console.log('函数表达式');
};

// 函数声明
function functionB() {
    console.log('函数声明');
};

函数提升

在ES6之前,js中是没有块级作用域的(一对{}为一个块级作用域),只有全局作用域和函数作用域。

js中的函数和变量会被提升到作用域的顶部,但变量提升的只有声明部分,在具体的赋值语句之前访问将得到undefined,而函数则是包括定义部分会被一起提升。

所以上面两种方式,函数表达式是以变量的方式定义的,在这之前相应的变量值为undefined,执行对应的函数会报错:

console.log(functionA); // undefined
functionA(); // TypeError: functionA is not a function

// 函数表达式
var functionA = function() {
    console.log('函数表达式');
};

functionA(); // 函数表达式,注意需要屏蔽上面的报错部分

而函数声明则会按照函数的方式进行提升,所以在声明之前就可以正常访问:

console.log(functionB); // [Function: functionB]
functionB(); // 函数声明

// 函数声明
function functionB() {
    console.log('函数声明');
}

functionB(); // 函数声明