美文网首页
函数声明与函数表达式的区别

函数声明与函数表达式的区别

作者: 前端阿良古 | 来源:发表于2018-10-03 01:00 被阅读0次

函数声明:

hello();
function hello(){
  console.log('这是函数声明!');
}

函数表达式:

hello(); // 这里会报错 Uncaught ReferenceError: hello is not defined
const hello = function(){
  console.log('这里是函数表达式');
}

原因:解析器会率先读取函数声明,并使其在任何地方都可以使用;至于函数表达式,则必须等到解释器执行到它所在的代码行才会被真正解释执行。(其实就是解析器会先声明变量再等执行到所在代码行才初始化)

可以同时使用函数表达式和函数声明,称之为具名函数表达式(Namedfunctionexpression,NFE),这种写法其实没啥用,还容易造成误会。要注意的是:这种语法在Safari中会导致错误

const hello = function hello(){
  console.log('同时使用');
}
hello(); // 同时使用

上面的代码看似没啥问题(就是没什么用而已),但是看看下面这个

const fn = function hello() {
  hello = 1;
  console.log(hello);
}
hello(); // 这里会报错:Uncaught ReferenceError: hello is not defined
fn(); // 这里输出函数本身ƒ hello() {hello = 1;console.log(hello);}

这是因为具名函数表达式有两个特性:

  • 具名函数表达式的函数标识符只能在函数体内被访问,函数体外不能被访问
  • 具名函数表达式的函数标识符是只读的,不能被赋值

总结:

  • 除此之外,函数声明和函数表达式是恒等的
  • 推荐使用函数表达式,因为js规范推荐先声明后使用

相关文章

  • 函数

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

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

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

  • 函数与作用域链

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

  • 16. 函数与作用域

    函数声明和函数表达式的区别 函数声明 声明不必放在调用的前面 函数表达式 声明必须放到调用的前面 变量与函数的声明...

  • 函数

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

  • 函数与作用域

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

  • JS函数

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

  • 进阶任务三

    1.函数声明和函数表达式有什么区别 函数声明 函数表达式 区别: 函数调用可以发生在函数声明之前,不能在函数表达式...

  • 函数与作用域

    函数声明和函数表达式有什么区别 函数声明 使用function关键字可以声明一个函数 函数表达式 区别 函数声明:...

  • JS函数与作用域

    1.函数声明和函数表达式有什么区别 函数声明: 函数表达式: 区别: 使用函数声明方式定义的函数,可以在声明前调用...

网友评论

      本文标题:函数声明与函数表达式的区别

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