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
相关产品推荐
相关产品推荐

