美文网首页
js函数声明与函数表达式有区别吗?

js函数声明与函数表达式有区别吗?

作者: _静夜听雨_ | 来源:发表于2022-02-07 15:03 被阅读0次

作为前端开发,函数无处不在,直到现在一直没有把函数声明和函数表达式区分得很清楚。
事实上,JavaScript 引擎在加载数据 时对它们是区别对待的。JavaScript 引擎在任何代码执行之前,会先读取函数声明,并在执行上下文中 生成函数定义。而函数表达式必须等到代码执行到它那一行,才会在执行上下文中生成函数定义。

来看下面的例子:

// 没问题 
console.log(sum(10, 10)); 
function sum(num1, num2) {
    return num1 + num2;
}

以上代码可以正常运行,因为函数声明会在任何代码执行之前先被读取并添加到执行上下文。这个 过程叫作函数声明提升(function declaration hoisting)。在执行代码时,JavaScript 引擎会先执行一遍扫描, 把发现的函数声明提升到源代码树的顶部。因此即使函数定义出现在调用它们的代码之后,引擎也会把函数声明提升到顶部。

如果把前面代码中的函数声明改为等价的函数表达式,那么执行的时候就会出错:

// 会出错
console.log(sum(10, 10));
let sum = function(num1, num2) {
    return num1 + num2; 
};

上面的代码之所以会出错,是因为这个函数定义包含在一个变量初始化语句中,而不是函数声明中。 这意味着代码如果没有执行到加粗的那一行,那么执行上下文中就没有函数的定义,所以上面的代码会出错。

这并不是因为使用 let 而导致的,使用 var 关键字也会碰到同样的问题:

console.log(sum(10, 10));
var sum = function(num1, num2) {
    return num1 + num2;
 };

除了函数什么时候真正有定义这个区别之外,这两种语法是等价的。

相关文章

  • 函数与作用域

    1.函数声明和函数表达式有什么区别?Javascript 中函数声明和函数表达式是存在区别的,函数声明在JS解析时...

  • 函数

    函数声明和函数表达式有什么区别 函数声明 函数表达式 函数声明和函数表达式的区别: 函数声明必须给定函数名称,函数...

  • 函数与作用域链

    1.函数声明与函数表达式有什么区别 函数声明: function myFunction(){}函数表达式:var ...

  • 函数

    一、问答 函数声明和函数表达式有什么区别? Js中的函数声明是指下面的形式: 函数表达式则是类似表达式那样来声明一...

  • web前端-js小记(3)-函数及作用域

    1. 函数声明和函数表达式有什么区别 函数声明 函数表达式 区别:函数声明不用把声明放到函数调用的前面,函数表达式...

  • 函数声明以及词法作用域

    函数声明和函数表达式有什么区别 函数在JS中有三种方式来定义: 函数声明(function declaration...

  • 函数

    一、函数声明和函数表达式有什么区别 函数声明: 函数表达式: 区别:在于函数声明前置的不同,函数声明是整个函数前置...

  • JS函数

    1.函数声明和函数表达式有什么区别 声明函数使用function可以声明一个函数 函数表达式 区别声明函数声明不用...

  • 函数与作用域

    函数声明和函数表达式有什么区别 函数声明 函数表达式 区别 函数表达式结束后需要加;表示声明变量结束。 函数表达式...

  • JS函数与作用域

    函数声明和函数表达式有什么区别 使用函数声明时,在执行js语句的时候,会先把函数提升到js语句的顶部,所以即使函数...

网友评论

      本文标题:js函数声明与函数表达式有区别吗?

      本文链接:https://www.haomeiwen.com/subject/yambkrtx.html