本文分析一段因缺少分号导致 JavaScript 代码隐式执行的案例。当变量赋值语句末尾未加分号时,后续以括号开头的表达式会被解析为对前一个函数的调用。文章详细解释了匿名函数如何接收参数并执行 toString 方法,揭示了这种写法在特定场景下的潜在风险及命名空间应用。
JavaScript 无分号导致的隐式函数执行陷阱
首先观察以下代码片段:
具体实现如下:
var a = function(t) { return t; }
(1 + 2).toString();
alert(a); 请问最终的输出结果是什么?
问题的核心在于第一行代码末尾遗漏了分号,导致代码实际被解析为 var a = function(t) { return t; }(1 + 2).toString();
执行流程为:首先定义变量 a 并赋值,接着执行赋值语句中的匿名函数,将参数 1+2 传入函数内部执行,获取返回值后调用 .toString() 方法将其转换为字符串,最后将该字符串赋值给变量 a。
这种 function() {}() 的写法通常用于创建独立的命名空间,具体原理可参考 JavaScript 命名空间的相关文档。