/*
- 立即执行函数
- 函数定义完,立即被调用,这种函数焦作立即执行函数
- 立即执行函数往往只会执行一次
- 如果只是下面这样写会报错,因为没有函数名,所以在function()是不被识别的,
- 它只能识别后面的大括号,把大括号当做一个代码块,那要怎么解决哪??
- 错误语法:
- function(){
- 代码......
- }
- 只需要在function()和大括号放到一个小括号里就行,这样写是代表function()
- 和大括号是一个整体,这样就不会报错了
- 正确语法:
- (function(){
- 代码......
- });
- 这样写虽然不报错了。但是,没有做到立即执行函数的效果,如何才能立即执行函数?
- 没有立即执行是因为没有调用这个匿名函数,想要调用需要在外层小括号后面再加一个小括号,
- 这样就可以做好立即执行的效果.
- 立即执行函数语法:
- (function(){
- 代码......
- })();
- 这样写了整体看起来好像很完整似的,其实,你会想到如果想要传值,那该如何传参数?
- 接收参数值的位置和代码函数对象的接收参数位置是一样的,是在function()的小括号中设置接收参数值,
- 那么传值在哪里添加??其实,就在结尾有一个小括号,而这个小括号就是传参数的位置。
- 带参数的立即执行函数语法:
- (function(a,b) {
- 代码......
- })(123,456);
- 注意:调用函数不止是需要函数对象,也可以不需要函数对象。因为这种写法的特殊性,
- 所以在很多框架中也被广泛的使用,其实这种写法整体就是个函数对象。
- 这种写法的特殊性就在于立即执行,也就是说在没有其他变量的调用下会被触发,其他这个说法不正确,因为
- 它是默认被window调用了,也可以说是被JavaScript底层调用了(个人理解,如有错请在评论区留言)。
- 而带有函数名的函数是属于被动调用,就是说带有函数名的函数是等待被其他函数调用或其他变量调用
*/ //第一个错误和第二个,这里就不在写了,自己可以去尝试一下,看看效果。
//不带参数的立即执行函数
(function() {
alert('不带参数的立即执行函数');
})();
//带参数的立即执行函数
(function(a, b) {
alert('带参数的立即执行函数: a =' + a + '; b =' + b);
})(123, 456);