js关于自执行函数的问题。

var arr;
console.log(arr)
(function (a) { console.log( a ) })
( arr )

clipboard.png

阅读 3.4k
6 个回答

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 )

老师说过,([{ 开头的行前面要加分号

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题