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来帮助理解嵌套。
相关文章推荐
- javascript函数声明
- JSP 隐式对象
- js 鼠标放上去显示浮层
- JSP 动作元素
- javascript三种创建对象的方式
- 如何获得当前屏幕顶端距离整个页面最上端的距离(即js获取浏览器滚动条距离顶端的距离)
- javascript 可能不知道的小技巧
- JS简单实现文件上传实例代码(无需插件)
- socket.io+angular.js+express.js做个聊天应用(四)
- JSON的读取,页面爬取
- js each的用法
- D3.js 整体展示篇
- JavaScript 经典实例收集整理
- PouchDB:可随时同步的开源JavaScript数据库
- ZeroClipboard js复制文本(兼容全部浏览器)
- JS实现无限分页加载——原理图解
- JS修炼之道》—— 读后总结
- 关于jsonp的理解
- JavaScript排序算法——选择排序
- JavaScript排序算法——希尔排序