You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中为何形参为undefined的函数调用后返回字符串?

为什么这个函数会返回字符串"ss"而不是undefined?

嘿,这个问题的核心其实是你误解了函数参数里的undefined——它不是全局的那个undefined值,而是一个普通的参数变量名!让我一步步给你拆解:

1. 函数参数的本质

先看你的函数定义:

var t = function(undefined){ return undefined }

这里的undefined只是函数的第一个参数的名字,和你写function(x){ return x }里的x没有任何区别。在函数的作用域里,这个参数名会"遮蔽"全局的undefined变量,也就是说函数内部用到的undefined指的是这个局部参数,而非全局的那个特殊值。

2. 调用函数时的参数传递

当你执行t("ss")时,你把字符串"ss"传递给了这个名为undefined的参数,此时函数内部的undefined变量的值就变成了"ss",函数返回它,自然就输出"ss"了。

3. 和void(0)的区别

你提到void(0)始终返回undefined,这点没错——void操作符的特性就是:不管后面跟的表达式执行结果是什么,它都会返回真正的undefined值。这和你函数里的情况完全不同,因为你函数里的undefined只是个被你起了特殊名字的局部变量,和全局的undefined没有关系。

补充个小知识点:在ES5之前,全局的undefined是可以被重新赋值的(比如undefined = "test"),不过现在ES5及之后的严格模式下,全局的undefined已经变成不可写的了,但函数参数里的undefined依然是局部变量,不受这个限制。

内容的提问来源于stack exchange,提问作者ERJAN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:21:09