自执行函数报错(xx is not a function)问题

自从不知道在哪里看见ES6推荐无分号后,我也就丢弃掉了分号,一直顺风顺水。直到...

自执行函数

作用: 隔离作用域(1. 变量隔离; 2. 避免闭包和作用域链带来的副作用,闭包只能取得包含函数中的变量的最后一个值--高级程序设计7.2.1章;)
写法:

// 写法一
(function () {
...
} ())

// 写法二
(function () {
...
}) ()

之所以网上蛮多人推荐写法一,是因为a = function() {...},调用时是a()而非(a)()。其实无所谓啦,我反而觉得写法二更容易理解~

报错 & 解决

报错: xxx is not a function...

自执行函数报错(xx is not a function)问题_第1张图片
报错前写法

报错信息

原因: 由于(自执行函数的)前一个表达式未写分号结束,js在执行时会认为自执行函数(最外层)的括号是在执行一个函数$(function...)(),而自执行函数括号的内部是这个函数的参数,故导致报错。

解决: 如果你也习惯了js不书写分号,那么请一定在使用自执行函数时在函数开头添加一个分号。

自执行函数报错(xx is not a function)问题_第2张图片
像这样

你可能感兴趣的:(自执行函数报错(xx is not a function)问题)