var arr;
console.log(arr)
(function (a) { console.log( a ) })
( arr )
因为你那样写有歧义,你的代码在 ESLint 里会被自动格式化为:
var arr
console.log(arr)(function (a) {
console.log(a)
})(arr)
学一下 ESLint 就不会有这样的问题了,你可以改成这样:
var arr
console.log(arr)
!(function (a) { console.log(a) })(arr)
立即执行函数通常作为一个单独模块使用。一般没有问题,但是,建议在自己写的立即执行函数前加分号,这样可以有效地与前面代码进行隔离。否则,可能出现意想不到的错误。
你想说明什么? 打印出来的是undefined的呀, 这个相当于你只初始化了 并没有赋值,所以为undefined 关于匿名自执行函数最主要的作用其实是块级作用域 因为ES5没有块级作用域,但有函数域
我测试了一下,和自执行函数、ESLint都没关系
var arr;
console.log(arr)
(function (a) { console.log( a ) })
( arr )
主要问题在第二行和第三行中间没有分隔符,如@xianshenglu说的那样,js引擎理解为第3、第4和第5行是3个函数调用,报错信息的意思是,console.log()运行的结果不是function,不能执行第3行的函数调用。
至于说和自执行函数无关,大家把第三行改为下面的代码,直接复制到浏览器的console命令行(和ESLint无关),也会有一样的报错信息。
var arr;
console.log(arr)
(123)
( arr )
var arr
console.log(arr)
;(function (a) { console.log( a ) })( arr )
老师说过,([{
开头的行前面要加分号
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
var arr;
console.log(arr);
(function (a) { console.log( a ); })( arr )
不加 ; 的都是邪教