`

JavaScript Garden - 函数声明与表达式

阅读更多

函数声明与表达式

函数是JavaScript中的一等对象,这意味着可以把函数像其它值一样传递。
一个常见的用法是把匿名函数作为回调函数传递对异步函数中。

函数声明

function foo() {}

上面的方法会在执行前被 解析(hoisted),因此它存在于当前上下文的任意一个地方,
即使在函数定义体的上面被调用也是对的。

foo(); // 正常运行,因为foo在代码运行前已经被创建
function foo() {}

函数赋值表达式

var foo = function() {};

这个例子把一个匿名的函数赋值给变量 foo

foo; // 'undefined'
foo(); // 出错:TypeError
var foo = function() {};

由于 var 定义了一个声明语句,对变量 foo 的解析是在代码运行之前,因此 foo 变量在代码运行时已经被定义过了。

但是由于赋值语句只在运行时执行,因此在相应代码执行之前, foo 的值缺省为 undefined

命名函数的赋值表达式

另外一个特殊的情况是将命名函数赋值给一个变量。

var foo = function bar() {
    bar(); // 正常运行
}
bar(); // 出错:ReferenceError

bar 函数声明外是不可见的,这是因为我们已经把函数赋值给了 foo
然而在 bar 内部依然可见。这是由于 JavaScript 的 命名处理 所致,
函数名在函数内总是可见的。

分享到:
评论

相关推荐

    浅析函数声明和函数表达式-函数声明的声明提前_.docx

    【函数声明与函数表达式】在JavaScript中,函数是第一类对象,这意味着它们可以作为值进行传递和存储。本文将重点讨论两种常见的函数定义方式:函数声明和函数表达式,特别是函数声明的声明提前(Hoisting)现象。 ...

    手机号-邮箱-用户名-正则表达式

    手机号-邮箱-用户名-正则表达式

    Java版-解释翻译Cron表达式(代码奉上)

    这可能是网上最完整的Cron表达式解析翻译方法。 Java版-解释翻译Cron表达式(代码奉上)。...此方法分为JavaScript版和Java版本,有需要的朋友请根据自己需要下载。 希望我写的方法有帮助到你,不足之处请多多指教。

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

    JavaScript提供了两种主要的方式来定义函数:函数声明(Function Declaration)和函数表达式(Function Expression)。理解这两种方式的区别对于编写高效、可维护的JavaScript代码至关重要。 ### 1. 函数声明 函数...

    头歌教学实践平台 Web前端开发基础 JavaScript学习手册十:正则表达式

    1. 字面量表示法与构造函数:在JavaScript中,有两种创建正则表达式的方式。一种是字面量表示法,即使用`/pattern/flags`,例如`/hello/`;另一种是构造函数表示法,`new RegExp('pattern', 'flags')`,如`new ...

    js-sandbox-14:正则表达式-评估函数

    正则表达式-评估函数 正则表达式,正则表达式或正则表达式(有时称为有理表达式)是定义搜索模式的一系列字符。 通常,字符串搜索算法会将此类模式用于字符串的“查找”或“查找并替换”操作,或用于输入验证。 ...

    JavaScript中函数表达式和函数声明及函数声明与函数表达式的不同

    JavaScript中函数表达式和函数声明是创建函数的两种基本方式,它们在语法和行为上有所区别。函数声明(Function Declaration)和函数表达式(Function Expression)的不同之处在于它们在代码中的处理方式和使用时机...

    Javascript中的函数声明与函数表达式(奇技淫巧)

    在阐述为什么之前,让我们先来明确Javascript中的两个概念:函数声明和函数表达式: 先来看看什么样的是函数声明: [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行] 再来看看什么样的是函数表达式: [Ctrl+A ...

    JavaScript中的函数申明、函数表达式、箭头函数

    与函数声明不同,函数表达式不会被提升,而是按照代码的顺序执行。这意味着在函数表达式赋值之前尝试调用它会导致错误,因为此时函数尚未定义。上面的例子展示了这种差异,通过比较函数声明和表达式的执行顺序,我们...

    浅析javascript中函数声明和函数表达式的区别

    与函数声明不同,函数表达式可以定义一个匿名函数或者命名函数。如果函数表达式包含函数名,则该函数名只能在函数体内部使用,不能在函数外部访问,因为这只是一个局部变量。函数表达式可以出现在代码的任何位置,...

    js cron 表达式生成器

    `cron`表达式源于Unix系统,用于定义周期性任务的调度,而在JavaScript环境中,我们通常使用第三方库来实现`cron`表达式的功能。 "Cron调度器"是一个工具,允许开发者创建和管理基于`cron`表达式的定时任务。这个...

    JavaScript应用实例-正则表达式学习.js

    JavaScript应用实例-正则表达式学习.js

    编译原理--正则表达式文档

    - **内置函数库**: 大多数编程语言如 Python、Java、JavaScript 都有内置的正则表达式库,提供方便的接口进行模式匹配。 - **模式匹配**: 用于字符串查找、替换、分割等操作,例如 `re.findall()` in Python 或 `...

    JavaScript 数据校验 正则表达式 示例代码

    JavaScript 数据校验 正则表达式 示例代码JavaScript 数据校验 正则表达式 示例代码JavaScript 数据校验 正则表达式 示例代码JavaScript 数据校验 正则表达式 示例代码JavaScript 数据校验 正则表达式 示例代码...

    理解 javascript 中的函数表达式与函数声明

    在JavaScript中,函数是第一类对象...总结来说,理解JavaScript中的函数声明和函数表达式是解决诸如闭包、立即执行函数等问题的基础。正确使用它们可以帮助避免语法错误,并充分利用JavaScript的动态特性和强大的功能。

    详解JavaScript中的函数声明和函数表达式

    与函数声明不同,函数表达式不会被提升,变量的声明会被提升,但赋值不会,直到执行到该行代码时才会赋值。 接下来我们来谈谈自执行函数表达式(IIFE, Immediately Invoked Function Expression)。这是一种特殊的...

    正则表达式学习手册

    - **分组与引用**:通过圆括号 `()` 对部分正则表达式进行分组,并可以通过 `\1`, `\2`, ... 进行引用。 - **模式修饰符**:例如 `/i` 表示忽略大小写,`/g` 表示全局搜索等。 通过以上总结可以看出,正则表达式的...

    issue-regex:正则表达式,用于匹配问题参考

    正则表达式 正则表达式,用于匹配问题参考 安装 $ npm install issue-regex 用法 const issueRegex = require ( 'issue-regex' ) ; 'Fixes #143 and avajs/ava#1023' . match ( issueRegex ( ) ) ; //=> ['#143', ...

    javascript强制函数自动执行.pdf

    与函数声明不同的是,这种类型的函数不会被提升,因此必须先声明再调用。 #### 函数声明与函数表达式的区别 尽管两者都可以用来定义函数,但它们之间存在一些关键的区别: 1. **提升(Hoisting)**:函数声明会被...

Global site tag (gtag.js) - Google Analytics