美文网首页基础js
js函数声明和函数表达式的区别

js函数声明和函数表达式的区别

作者: 该昵称注册中 | 来源:发表于2017-11-27 15:20 被阅读0次

js函数声明和函数表达式的区别

简单来说,ECMAScript是通过上下文来区分这两者的:假如 function foo(){} 是一个赋值语句或表达式的一部分,则认为它是一个函数表达式。而如果 function foo(){} 被包含在一个函数体内,或者位于程序(的最上层)中,则将它作为一个函数声明来解析。显然,在省略标识符的情况下,“表达式” 也就只能是表达式了。

函数声明

function 函数名(){}

funciton fn(){}

函数表达式

function 函数名(可写可不写)(){} : 分别代表:命名函数表达式,匿名函数表达式

var bar = function foo(){}; // 表达式,因为它是赋值表达(AssignmentExpression)的一部分
new function bar(){}; // 表达式,因为它是New表达式(NewExpression)的一部分
(function(){
    function bar(){}; // 声明,因为它是函数体(FunctionBody)的一部分
})();
(function foo(){})  函数表达式,它被包含在一对圆括号中的函数,在其上下文环境中,
()构成了一个分组操作符,而分组操作符只能包含表达式
var a = function(){} // 函数表达式
(function aaa(){}) // 函数表达式
~function aaa(){}
-function aaa(){}
+function aaa(){}
!function aaa(){}  
二者区别
区别一

函数表达式可以直接在后面加括号执行,而函数声明不可以。也就是说,函数表达式可以通过直接加()来执行这个函数

如:

function aaa(){alert(1)}(); // 这是不可以的

var a = function aaa(){alert(1)}(); // 可以的
~function aaa(){alert(2)}();  
区别二

函数声明提前

a(); //报错
var a = function(){
 alert(1)
}
b(); //正常运行
function b(){
  alert(2)
}
区别三

作用域的区别

var a = function aaa(){
    alert(1);
    alert(typeof aaa); // 内部可以找到
}
a(); // 1 function
aaa(); // 外部找不到 //  1

相关文章

  • 函数与作用域

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

  • 函数

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

  • 函数

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

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

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

  • 函数与作用域

    1. 函数声明和函数表达式有什么区别 函数声明和函数表达式都是声明函数的方式 区别1 写法:函数声明 : fu...

  • 函数

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

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

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

  • JS函数与作用域

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

  • JS函数

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

  • js函数

    一、函数声明和函数表达式有什么区别? 函数声明和函数表达式的区别:函数声明可以提升到其他代码之前(即函数声明前置)...

网友评论

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

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