JavaScript函数调用及嵌套

来源:互联网 发布:软件进口销售 编辑:程序博客网 时间:2024/06/05 11:25

函数调用

函数的调用和C中差不多,但形式可能有点不同。JavaScript的函数调用形式为:(函数)(参数列表)或者函数名(参数列表)。后者和C是一样的,但前者和C是迥然不同的,因为C中函数声明和函数调用是区分开的。先来看下例子:
[javascript] view plain copy
  1. function add(num1, num2) {  
  2.     return num1 + num2;  
  3. }  
  4. var a = add(1, 2); // 3  
这种方式就是函数名(参数列表)的形式,我们在C中经常见到,就不详细说了,我们可以把上面那个换种形式来展现:
[javascript] view plain copy
  1. var a = (function add(num1, num2) {  
  2.     return num1 + num2;  
  3. })(1, 2);  
  4. console.log(a);  // 3  
这样我们就能实现声明和执行一块处理。
但是这样有个问题,我们再看一种情况:
[javascript] view plain copy
  1. var a = (function add(num1, num2) {  
  2.     return num1 + num2;  
  3. })(1, 2);  
  4. var b = add(1, 2); // error,add is not defined  
  5. console.log(a); // 3  
  6. console.log(b); // undefined  
这是因为add这个变量的作用域仅限于括号内,这个在之后的作用域讲解中将讲到。
这样的调用,一般是在匿名函数中,为了让函数立即执行才使用这种方式,又或者,利用它的不足,利用JavaScript的作用域特点,将函数内的变量全部转为局部变量,达到封装和防止污染全局的目的。

函数嵌套

JavaScript的函数理论上是可以无限嵌套的,当然并不推荐嵌套太多,原因有很多,无论是性能还是代码简洁要求,都要求不应该嵌套太多。我们举一个嵌套的例子:
[javascript] view plain copy
  1. function getAbs(num) {  
  2.     function isNegative(num) {  
  3.         return num < 0;  
  4.     }  
  5.     return isNegative(num) ? -num : num;  
  6. }  
  7. var a = getAbs(-1); // 1  
记住一句话,有嵌套就有父子关系(相互嵌套的不在参考范围内,也极度不推荐)。在上面的例子中,父函数即为getAbs,子函数为isNegative。
在JavaScript的嵌套中,涉及到作用域的问题,我们先不讲太复杂的,简单的可以记成:父函数中声明的所有变量,或者说,父函数中能使用的变量,都能在子函数中使用,但反过来,子函数中显式声明的所有变量,都不能在父函数中使用。后面会讲到caller和callee来帮助理解嵌套。
0 0
原创粉丝点击