JavaScript 自执行函数简述
1.以下代码执行输出‘点击按钮’,然后报错Uncaught TypeError: (intermediate value)(…) is
not a function,
A.输出‘点击按钮是因为’btn绑定点击事件的函数被执行,原因是点击函数后缺少了一个分号,所以
代码没有和我们预期一样执行,
a.首先代码执行到事件函数结束时候发现后面有一个括号,就调用了事件函数,将自执行函数
的函数部分当成参数传进事件函数,然后将返回值付给btn.onclick
b.再向下执行又遇到括号,则将btn.onclick当成函数来调用,发现btn.onclick不是函数类型
所以报错
var btn = document.getElementsByTagName('button')[0];
btn.onclick = function() {
console.log('点击按钮');
}
(function() {
console.log('自执行函数输出')
})();
2.以下代码执行函数一报语法错误Uncaught SyntaxError: Unexpected token
(,同样是因为代码语句界限不清晰,但是如果加上括号如函数二,则不报错
A.原因是括号明确指定代码界限,其实括号在这里的作用是将函数变成能够表示这个函数的一个表
达式,因为代码执行除了声明,还有就是根据代码进运算,运算是建立在表达式和运算符上面的,
所以执行的代码都要被变成表达式或者一个值进行运算。
// 函数一
function() {
console.log('函数一');
}();
// 函数二
(function() {
console.log('函数二');
})();
3.函数三之所以没有括号包裹还能执行,是因为前面的赋值符号,会将其转化为值,所以其他一些
运算符号具备一样的功能比如!符号
// 函数三
var fn = function() {
console.log(‘表达式函数’);
}()
// 函数四
!function() {
console.log('!函数');
}();
// 函数五 + - * /
+function() {
console.log('+函数')
}