出现这个错误的原因是因为Javascript设计时,function既可以当做语句又可以当做是表达式。
语句:
function f(){}
表达式:
var f = function f(){}
为了避免解析上的歧义,JavaScript 引擎规定,如果function关键字出现在行首,一律解释成语句。因此,JavaScript 引擎看到行首是function关键字之后,认为这一段都是函数的定义,不应该以圆括号结尾,所以就报错了。
解决办法
不要让function关键词出现在行首就可以解决这个问题了。
最简单的解决办法就是添加一个括号
例如:
(function(){ /* code */ }());
// 或者
(function(){ /* code */ })();
目的
一是不必为函数命名,避免了污染全局变量;
二是 IIFE 内部形成了一个单独的作用域,可以封装一些外部无法读取的私有变量。
本文解析了JavaScript中因函数定义位置不当导致的语法错误原因,介绍了function作为语句与表达式的区别,以及如何通过立即执行函数表达式(IIFE)解决此问题,避免解析歧义。

223

被折叠的 条评论
为什么被折叠?



