Home > Web Front-end > JS Tutorial > body text

The difference between function expressions and function declarations in JavaScript and the differences between function declarations and function expressions_javascript skills

WBOY
Release: 2016-05-16 15:32:11
Original
1030 people have browsed it

Function expressions and function declarations

In ECMAScript, the two most common ways to create functions are function expressions and function declarations. The difference between the two is a bit confusing, because the ECMA specification only makes one point clear: function declarations must have identifiers (Identifiers). ) (which is what everyone often calls the function name), and this identifier can be omitted in function expressions:

 Function declaration:

 function function name (parameter: optional){function body}

 Function expression:

 function function name (optional) (parameters: optional) {function body}

So, it can be seen that if the function name is not declared, it must be an expression. But if the function name is declared, how to determine whether it is a function declaration or a function expression? ECMAScript differentiates by context. If function foo(){} is part of an assignment expression, it is a function expression. If function foo(){} is contained within a function body, or is located in the program At the top, it's a function declaration.

 function foo(){} // 声明,因为它是程序的一部分
 var bar = function foo(){}; // 表达式,因为它是赋值表达式的一部分
 new function bar(){}; // 表达式,因为它是new表达式
 (function(){
  function bar(){} // 声明,因为它是函数体的一部分
 })();
Copy after login

There is also a less common function expression, which is the one enclosed by parentheses (function foo(){}). The reason why it is an expression is because the parentheses () are a grouping operator, and its internal Including expressions, let’s look at a few examples:

function foo(){} // Function declaration
(function foo(){}); // Function expression: included in the grouping operator

Named function expression

When it comes to named function expressions, of course, it must have a name. The previous example var bar = function foo(){}; is a valid named function expression, but there is one thing to remember: this name only Valid within the scope of the newly defined function, because the specification stipulates that identifiers cannot be valid within the surrounding scope:

 var f = function foo(){
  return typeof foo; // foo是在内部作用域内有效
 };
 // foo在外部用于是不可见的
 console.log(typeof foo); // "undefined"
 console.log(f()); // "function"
var f = function foo(){
return foo; // foo是在内部作用域内有效
};
// foo在外部用于是不可见的
console.log(typeof foo); // "undefined"
console.log( f()==f); // "function"
console.log(f.name);//foo
Copy after login

Since this is required, what is the use of named function expressions? Why a name?

As we said at the beginning: giving it a name can make the debugging process more convenient, because when debugging, if each item in the call stack has its own name to describe it, then the debugging process will be great. Yes, the feeling is different.

ps: The difference between function declaration and function expression in JS

The function declaration in Js refers to the following form:

function functionName(){ 
} 
Copy after login

declares a function in this way, while function expression declares a function like an expression, such as:

     var functionName = function(){ 
}
Copy after login

Many friends may be confused when they see these two writing methods. These two writing methods are similar and both seem to be feasible in applications. So what is the difference between them?

In fact, the js parser does not treat function declarations and function expressions equally. For function declarations, the js parser will read them first to ensure that the declaration has been parsed before all code is executed. Function expressions, like defining variables of other basic types, will only be parsed when a certain sentence is executed. , so in practice, they will still have differences. Specifically, when using the function declaration form to define a function, the calling statement can be written before the function declaration, and the latter will report an error if it does so.

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!