JS基础 -- 立即执行函数

/*
* 立即执行函数
* 函数定义完,立即被调用,这种函数焦作立即执行函数
* 立即执行函数往往只会执行一次
*
* 如果只是下面这样写会报错,因为没有函数名,所以在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);

你可能感兴趣的:(JS基础 -- 立即执行函数)