javascript 内部函数的定义及调用

内部函数,定义在另一个函数中的函数

function outer() {
                console.log("out");
                function inner () {
                    console.log("in");
                }
            }
            outer();   // out 
            inner();   // 报错: inner is not defined

这里的inner是一个定义在outer中的内部函数,它的作用域在函数outer内部,外部运行无效。

1.那么如何在任何地方调用内部函数?

javascript允许像传递任何类型的数据一样传递函数,也就是说,javascript中的内部函数能够逃脱定义他们的外部函数。

① 给内部函数指定一个全局变量

       var bgg;
            function outer() {
                console.log("out");
                function inner () {
                    console.log("in");
                }
                bgg=inner;
            }
            outer();   // out 
            bgg();   // in

② 通过在父函数中返回值来实现对内部函数的引用( return )

            function outer() {
                            console.log('out');
            
                            function inner() {
                                console.log('in');
                            }
                            return inner;
                        }
                        var res = outer();  // out
                        res();   // in
                        outer();  //out 

 在这里例子中,执行 out() ,只是运行这个函数,结果是什么?打印输出 out ,把函数 inner 作为函数 out 的返回值。 var  res = out(),这句又在干什么?

这样子理解,等号会计算其右边的表达式,并且把右边表达式的值 赋值给等号左边。out函数运行的返回值是 函数 inner ,所以下一步中,运行 res, 会打印出 in 。

            function outer() {
                console.log("out");

                return function inner() {
                    console.log("in")
                }
            }
            outer()();   // out  in 

 上面这个例子中是 执行函数 out ,并把 函数返回值 inner 函数 返回给outer,out()(),这第二个括号相当于自执行函数了。

注意事项:1.return 是在函数语句结束时执行,并返回表达式的值作为函数的结果

2.返回空值,语法:return;

一般来讲,为事件处理函数返回return:false; ,作用在于阻止默认事件行为和取消默认动作,比如,在默认情况下点击一个<a>元素,那么页面就会跳转到元素href属性指定的页,那当你用return false;时,就相当于一个终止符,而return true;相当于一个执行符。

自己当时的一点误解解决:当return一个表达式时,会把表达式的值作为函数的结果,而这个值我们是看不到的,只有打印输出时我们才能看到这个函数的返回值。函数的运行结果和返回值并不是同一个“东西”。