在外部函数之外直接调用内部函数:
代码如下:
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 <script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js"></script> 7 <script> 8 function outFunction(){ 9 console.log("外部函数被执行了"); 10 function innerFunction(){ 11 console.log("内部函数被执行了"); 12 } 13 } 14 $(function(){ 15 innerFunction(); 16 }) 17 </script> 18 </head> 19 <body> 20 </body> 21 </html>
运行结果:
报错原因:
内部函数的作用域在外部函数内,所以,内部函数只能在外部函数内被调用。
在外部函数内调用内部函数:
代码如下:
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 <script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js"></script> 7 <script> 8 function outFunction(){ 9 console.log("外部函数被执行了"); 10 function innerFunction(){ 11 console.log("内部函数被执行了"); 12 } 13 innerFunction(); 14 } 15 $(function(){ 16 outFunction(); 17 }); 18 </script> 19 </head> 20 <body> 21 </body> 22 </html>
运作结果:
内部函数成功被调用。
在外部函数之外调用内部函数,把内部函数 赋值给一个全局变量
代码如下:
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 <script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js"></script> 7 <script> 8 //定义一个全局变量 9 var n; 10 function outFunction(){ 11 console.log("外部函数被执行了"); 12 function innerFunction(){ 13 console.log("内部函数被执行了"); 14 } 15 n = innerFunction;//把内部函数赋值给全局变量n 16 } 17 $(function(){ 18 outFunction(); 19 console.log("以下是全局变量调用内部方法:"); 20 n(); 21 }); 22 </script> 23 </head> 24 <body> 25 </body> 26 </html>
运行结果:
在这里,全局变量n相当于面向对象的委托,当把内部函数赋值给全局变量时,调用委托方法就会调用内部函数。
在外部函数之外调用内部函数,把内部函数赋值给一个变量:
代码如下:
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 <script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js"></script> 7 <script> 8 9 // 在外部函数之外调用内部函数,把内部函数赋值给一个变量: 10 11 function outFunction(){ 12 console.log("外部函数被执行了"); 13 function innerFunction(){ 14 console.log("内部函数被执行了"); 15 } 16 return innerFunction; 17 } 18 $(function(){ 19 20 console.log("先把外部函数赋值给变量"); 21 var temp = outFunction(); 22 console.log("再执行外部函数变量"); 23 temp(); 24 25 }); 26 </script> 27 </head> 28 <body>
运行结果:
在这里,我们可以看到,内部函数不仅可以赋值给全局变量,还可以赋值给局部变量。