JavaScript匿名函数代码疑问:(0)的作用及输出为0的原因?
嘿,这个问题问得很精准,咱们一步步把它拆明白:
一、匿名函数末尾的
(0)到底干啥用? 这是**立即调用函数表达式(IIFE,Immediately Invoked Function Expression)**的标准写法。你写的(function(x) { ... })是一个函数表达式,后面跟的(0)就是直接给这个函数传入参数0,并且立刻执行它。简单说就是:刚定义完函数就马上调用,把0塞给函数里的形参x。
二、为啥
delete x之后返回x还是0? 这里的核心是搞懂delete操作符的适用边界:
delete只能用来删除对象的属性或者数组的元素(删除数组元素会留下空位,不会改变数组长度),但它完全管不了变量、函数声明,还有函数的形参。- 你代码里的
x是函数的形参,属于局部变量范畴,delete x这行代码其实是「无效操作」——因为delete根本没权限删除它。
咱们把代码的执行流程走一遍:
- 调用匿名函数,传入参数
0,形参x被赋值为0; - 执行
delete x,这行代码啥也没做,因为x是局部变量,不在delete的管辖范围内; - 函数返回
x,也就是0; - 返回值被赋值给
output,最后console.log(output)自然就输出0了。
给你补个对比例子,看看delete真正生效的场景:
// 如果x是对象的属性,delete就会起作用 var obj = {x: 0}; delete obj.x; console.log(obj.x); // 输出undefined
但换成变量/形参,delete就是摆设:
var x = 0; delete x; console.log(x); // 依然输出0
三、一句话总结
- 末尾的
(0)是立即调用匿名函数,给形参x传值0; delete无法删除函数形参(局部变量),所以x的值始终是0,最终输出就是0。
内容的提问来源于stack exchange,提问作者nirmesh
相关产品推荐
相关产品推荐

