`

JavaScript Function Declarations vs. Function Expressions

 
阅读更多

原创转载请注明出处:http://agilestyle.iteye.com/blog/2341737

 

There are actually two literal forms of functions.

The first is a function declaration, which begins with the function keyword and includes the name of the function immediately following it. The contents of the function are enclosed in braces, as shown in this declaration:

function add(num1, num2) {
    return num1 + num2;
}

 

The second form is a function expression, which doesn't require a name after function. These functions are considered anonymous because the function object itself has no name. Instead, function expressions are typically referenced via a variable or property, as in this expression:

var add = function(num1, num2) {
    return num1 + num2;
};

 

Although these two forms are quite similar, they differ in a very important way. Function declarations are hoisted to the top of the context (either the function in which the declaration occurs or the global scope) when the code is executed. That means you can actually define a function after it is used in code without generating an error. For example:

var result = add(5, 5);

function add(num1, num2) {
    return num1 + num2;
}

console.log(result);    // 10

 

This code might look like it will cause an error, but it works just fine. That's because the JavaScript engine hoists the function declaration to the top and actually executes the code as if it were written like this:

function add(num1, num2) {
    return num1 + num2;
}

var result = add(5, 5);

console.log(result);    // 10

 

Function hoisting happens only for function declarations because the function name is known ahead of time. Function expressions, on the other hand, cannot be hoisted because the functions can be referenced only through a variable. So this code causes an error:

// error!
var result = add(5, 5);
var add = function (num1, num2) {
    return num1 + num2;
};

 

 

Reference

Leanpub.Principles.of.Object-Oriented.Programming.in.JavaScript.Jun.2014 

 

 

分享到:
评论

相关推荐

    python3.6.5参考手册 chm

    The json module: JavaScript Object Notation The plistlib module: A Property-List Parser ctypes Enhancements Improved SSL Support Deprecations and Removals Build and C API Changes Port-Specific ...

    最通俗易懂的javascript变量提升详解

    对于函数声明(function declarations),它们同样会被提升,但不会像变量那样只提升声明。整个函数体都会被提升到作用域顶部,这被称为“函数声明提升”。 ```javascript show(); // 输出 "函数声明方式" function ...

    JavaScript-Advanced:JavaScript Advanced的所有作业

    3. **函数表达式与声明**: 区分函数声明(function declarations)和函数表达式(function expressions),如匿名函数、箭头函数以及IIFE(立即执行的函数表达式),它们在代码组织和作用域上有不同表现。...

    jsp页面中的代码执行加载顺序介绍.docx

    1. **声明部分**(Declarations):用于声明变量或方法。 2. **表达式**(Expressions):用于输出某个变量或方法的结果。 3. **脚本部分**(Scriptlets):包含普通的Java代码,如循环、条件判断等。 4. **指令部分...

    javascript-examples:用于演示高级 JS 概念的 Javascript 示例

    4. **函数表达式与声明(Function Expressions vs Declarations)**:JavaScript支持函数表达式(如匿名函数和命名函数表达式)和函数声明。它们之间有细微差别,比如函数声明有提升(Hoisting),而表达式则没有。 ...

    Frontend-best-practise-JS-functions

    - 函数声明(function declarations)如`function foo() {}`,具有提升(hoisting)特性,可以在定义之前调用。 - 函数表达式(function expressions)如`var foo = function() {};`或`const foo = function bar()...

    jsp一些简单的代码

    在JSP中,脚本元素包括声明(declarations)、脚本let(scriptlets)和表达式(expressions)。声明用于定义变量或方法,它们在JSP转换为Servlet时被移动到Servlet的类定义中。例如: ```jsp ! int count = 0; %> `...

    JSP+Ajax实例演示

    JSP的主要组件包括指令(directives)、脚本元素(scriptlets)、表达式(expressions)和声明(declarations)。JSP在服务器端运行,生成HTML代码并发送到客户端浏览器。 **二、Ajax介绍** Ajax是一种不刷新整个...

    Guia-Perguntas-Respostas:问答指南

    - 理解函数表达式(function declarations vs function expressions)的区别。 - 作用域决定了变量的可见性,JavaScript有全局作用域和局部作用域,以及ES6引入的块级作用域。 6. **闭包(Closures)** - 闭包是...

    Advanced-[removed]记录学习高级javascript的成长路径

    3. **函数表达式与声明(Function Expressions vs Declarations)**:了解函数表达式(如匿名函数和命名函数表达式)与函数声明的区别,如何处理作用域和提升(hoisting),以及它们在模块化和防止全局污染中的作用。...

    JSP Ajax树形菜单完整示例

    JSP的主要组件包括指令(directives)、脚本元素(scriptlets)、表达式(expressions)和声明(declarations)。 **二、Ajax原理** Ajax的核心是XMLHttpRequest对象,它允许JavaScript在后台与服务器进行异步数据...

    Ajax jsp servlet

    4. **声明(Declarations)**:`!...%>`用于声明变量或方法,这些变量和方法可以在整个JSP页面中使用。 5. **动作(Actions)**:如`<jsp:include>`、`<jsp:forward>`等,用于处理页面的包含、转发等操作。 **...

    JSP高级编程,JSP

    4. **表达式(Expressions)**:用`<%=...%>`表示,将Java表达式的值转换为字符串并输出到页面。 5. **声明(Declarations)**:在`!...%>`中声明变量或方法,供整个JSP页面使用。 6. **注释(Comments)**:用于...

    CMPUT402I3

    函数表达式(function expressions)和函数声明(function declarations)是两种常见的定义函数的方式,而箭头函数(arrow functions)则为编写简洁的函数提供了一种新的语法。 对象是JavaScript中的核心特性,它们...

    JSP入门学习手册

    动态内容通过指令(directives)、脚本元素(scriptlets)、表达式(expressions)和声明(declarations)来实现。 **JSP指令**: 1. **page指令**:用于设置整个页面的属性,如编码类型、语言、导入的包等。例如`;...

    Day09

    函数表达式(function expressions)和函数声明(function declarations)是两种定义函数的方式,而箭头函数(arrow functions)则是ES6引入的新语法,它提供了更简洁的函数定义方式。 JavaScript中的数组(arrays...

    JS两种定义方式的区别、内部原理

    本文将深入探讨两种主要的函数定义方式:函数声明(Function declarations)和函数表达式(Function expressions),以及它们之间的区别和内部原理。 首先,我们来看函数声明(方式1)。这种方式是通过`function`...

    JSP动态网站开发基础教程与实验指导从基础到应用.rar

    4. **JSP脚本元素**:包括声明(Declarations)、脚本块(Scriptlets)和表达式(Expressions),分别用于定义变量、编写Java代码和输出数据。 ### 二、JSP核心内置对象 1. **request**:代表HTTP请求,用于获取...

    app-task

    函数表达式(function expressions)和函数声明(function declarations)是两种定义函数的方式,其中匿名函数和箭头函数是现代JavaScript的常见形式。 5. **异步编程**:JavaScript是单线程的,因此异步编程至关...

Global site tag (gtag.js) - Google Analytics