您的位置:首页 > Web前端 > JavaScript

JavaScript函数调用及嵌套

2016-02-03 14:20 555 查看


函数调用

函数的调用和C中差不多,但形式可能有点不同。JavaScript的函数调用形式为:(函数)(参数列表)或者函数名(参数列表)。后者和C是一样的,但前者和C是迥然不同的,因为C中函数声明和函数调用是区分开的。先来看下例子:

[javascript] view
plain copy

function add(num1, num2) {

return num1 + num2;

}

var a = add(1, 2); // 3

这种方式就是函数名(参数列表)的形式,我们在C中经常见到,就不详细说了,我们可以把上面那个换种形式来展现:

[javascript] view
plain copy

var a = (function add(num1, num2) {

return num1 + num2;

})(1, 2);

console.log(a); // 3

这样我们就能实现声明和执行一块处理。
但是这样有个问题,我们再看一种情况:

[javascript] view
plain copy

var a = (function add(num1, num2) {

return num1 + num2;

})(1, 2);

var b = add(1, 2); // error,add is not defined

console.log(a); // 3

console.log(b); // undefined

这是因为add这个变量的作用域仅限于括号内,这个在之后的作用域讲解中将讲到。

这样的调用,一般是在匿名函数中,为了让函数立即执行才使用这种方式,又或者,利用它的不足,利用JavaScript的作用域特点,将函数内的变量全部转为局部变量,达到封装和防止污染全局的目的。

函数嵌套

JavaScript的函数理论上是可以无限嵌套的,当然并不推荐嵌套太多,原因有很多,无论是性能还是代码简洁要求,都要求不应该嵌套太多。我们举一个嵌套的例子:

[javascript] view
plain copy

function getAbs(num) {

function isNegative(num) {

return num < 0;

}

return isNegative(num) ? -num : num;

}

var a = getAbs(-1); // 1

记住一句话,有嵌套就有父子关系(相互嵌套的不在参考范围内,也极度不推荐)。在上面的例子中,父函数即为getAbs,子函数为isNegative。
在JavaScript的嵌套中,涉及到作用域的问题,我们先不讲太复杂的,简单的可以记成:父函数中声明的所有变量,或者说,父函数中能使用的变量,都能在子函数中使用,但反过来,子函数中显式声明的所有变量,都不能在父函数中使用。后面会讲到caller和callee来帮助理解嵌套。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: