0

0

JavaScript 中函数声明式标识符在作用域内不可重新赋值

聖光之護

聖光之護

发布时间:2026-03-03 11:23:01

|

528人浏览过

|

来源于php中文网

原创

JavaScript 中函数声明式标识符在作用域内不可重新赋值

本文解析 IIFE 内部具名函数表达式(如 (function b(){})())中,为何对函数名 b 的赋值操作无效——其本质是函数名在函数作用域内被绑定为不可写、不可配置的常量绑定,即使在非严格模式下赋值也静默失败。

本文解析 iife 内部具名函数表达式(如 `(function b(){})()`)中,为何对函数名 `b` 的赋值操作无效——其本质是函数名在函数作用域内被绑定为不可写、不可配置的常量绑定,即使在非严格模式下赋值也静默失败。

在 JavaScript 中,具名函数表达式(Named Function Expression, NFE) 的名称(如 b)具有特殊的绑定行为:它仅在函数体内部可见,且该绑定是不可修改的(immutable)。这与 var 或 let 声明的变量有根本区别。

以如下立即执行函数表达式为例:

(function b() {
  console.log(b); // 输出:ƒ b() { ... }
  b = 20;
  console.log(b); // 依然输出:ƒ b() { ... },而非 20
})();

表面看,b = 20 像是一次普通赋值,但实际它并未改变 b 的值。原因在于:
✅ 函数名 b 在该函数作用域中被创建为一个不可写(writable: false)、不可配置(configurable: false) 的绑定;
✅ 在非严格模式下,对该只读绑定的赋值操作会被静默忽略(no-op),不报错也不生效;
✅ 在严格模式下,则会立即抛出 TypeError: Assignment to constant variable. 类型错误,明确暴露问题。

验证严格模式下的行为:

(function b() {
  'use strict';
  console.log(b); // ƒ b() { ... }
  b = 20;         // ❌ TypeError: Assignment to constant variable.
  console.log(b); // 此行不会执行
})();

⚠️ 注意事项:

光子AI
光子AI

AI电商服饰商拍平台

下载

立即学习Java免费学习笔记(深入)”;

  • 此行为与函数声明(function b(){})不同:函数声明的名称也具不可写性,但作用域规则略有差异;而此处是函数表达式中的名称绑定,其生命周期严格限定于表达式自身函数体内;
  • b 不是 var/let/const 声明的变量,因此不受变量提升或暂时性死区(TDZ)影响,而是由引擎在函数创建时自动建立的特殊词法绑定;
  • 若需在函数内存储可变值,应显式使用独立变量(如 let value = 20;),而非试图覆盖函数名。

✅ 正确实践示例:

(function b() {
  console.log('Function:', b); // ✅ 安全访问函数本身
  let result = 20;             // ✅ 使用新变量承载业务值
  console.log('Value:', result); // 20
})();

总结:函数表达式的名称(如 b)是只读的“活引用”(live reference)到函数对象本身,设计初衷是支持递归调用和调试识别,绝非用于重赋值的变量占位符。理解这一机制,有助于避免隐蔽的赋值失效陷阱,并写出更健壮、可维护的函数式代码。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1561

2023.10.24

mysql标识符无效错误怎么解决
mysql标识符无效错误怎么解决

mysql标识符无效错误的解决办法:1、检查标识符是否被其他表或数据库使用;2、检查标识符是否包含特殊字符;3、使用引号包裹标识符;4、使用反引号包裹标识符;5、检查MySQL的配置文件等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

205

2023.12.04

Python标识符有哪些
Python标识符有哪些

Python标识符有变量标识符、函数标识符、类标识符、模块标识符、下划线开头的标识符、双下划线开头、双下划线结尾的标识符、整型标识符、浮点型标识符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

313

2024.02.23

java标识符合集
java标识符合集

本专题整合了java标识符相关内容,想了解更多详细内容,请阅读下面的文章。

290

2025.06.11

c++标识符介绍
c++标识符介绍

本专题整合了c++标识符相关内容,阅读专题下面的文章了解更多详细内容。

172

2025.08.07

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

557

2023.09.20

function是什么
function是什么

function是函数的意思,是一段具有特定功能的可重复使用的代码块,是程序的基本组成单元之一,可以接受输入参数,执行特定的操作,并返回结果。本专题为大家提供function是什么的相关的文章、下载、课程内容,供大家免费下载体验。

495

2023.08.04

js函数function用法
js函数function用法

js函数function用法有:1、声明函数;2、调用函数;3、函数参数;4、函数返回值;5、匿名函数;6、函数作为参数;7、函数作用域;8、递归函数。本专题提供js函数function用法的相关文章内容,大家可以免费阅读。

166

2023.10.07

C++高性能网络编程与Reactor模型实践
C++高性能网络编程与Reactor模型实践

本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。

0

2026.03.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 5.7万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.2万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号