JavaScript函数理解(一) -- 函数嵌套与闭包入门
来源:互联网 发布:数据统计表模板 编辑:程序博客网 时间:2024/04/27 19:52
【嵌套函数】
JavaScript允许在函数内部嵌套定义函数,允许函数用作数据错位参数传递给另一个函数(JavaScript中所有函数都可以看做对象),并且在函数词法作用域下面,可以产生与传统面向对象语言不同的惊人地方。
首先,JavaScript的函数是通过词法来划分作用域的,而不是动态的划分作用域的,于是,函数的是在定义它们的作用域中运行,而不是在执行它们的作用域中运行,所以,当嵌套函数和它的外围函数定义在同一个词法作用域中的时候,是很容易理解的。
1:在JavaScript中函数可以嵌套在另一个函数中进行定义(有点儿类似与Java中的内部类,机制有些不同--理解时可以进行类比学习,温故而知新!)
function distance(x1, y1, x2, y2) { function square (x) { return x * x; } return Math.sqrt(square(x1 - x2) + square(y1 - y2));}var result = distance(0, 0, 3, 4);console.log(result); // 5在上面的代码片段中,函数distance中嵌套定义了函数square。这时,函数square只能在distance中被调用。如果我们想要在distance之外调用square函数,由于JavaScript中函数执行环境和变量作用域的限制,我们将得到一个很不友好的错误提示!
2:结合嵌套函数更通俗易懂的理解一下JavaScript中的闭包:如果内部的嵌套函数使用了外部函数的变量或者参数,那么内部函数就形成了一个闭包(Closure)。-- 闭包的具体理解在另一篇笔记里面有记录!
闭包的特性:
1):闭包能够在起嵌套的外部函数执行完之后继续访问外部函数的变量和参数。
--这与JS的函数执行环境和变量作用域链有着密切关系。此处复习记忆一下。
2):闭包中包含指向外部函数的引用。
--采用Chrome浏览器调试时,可以很直观的进行验证。
3):在闭包中想要在访问外部函数的this对象时,需要我们在进入闭包之前就进行指定。通常的做法是在进入闭包之前声明: var self = this; 在闭包中采用self引用外部函数的this对象。写到这里突然想来关于JS中的this指向问题,忘记上传自己的笔记了,这里先引用一篇文章‘深入浅出 JavaScript 中的 this’,之后再补上自己的学习笔记。
4):闭包有两个比较常用的用途,一个是可以利用它访问到局部变量,另一个是可以把它外围作用域中的变量值存储在内存中而不在函数调用完毕后就销毁。(别的还有诸如模拟私有变量和函数等等)。
-- 其实所有的JavaScript函数都可以说是闭包,但是只有当一个嵌套函数被导出到它所定义的作用域之外时,这种闭包才是有趣的。
- JavaScript函数理解(一) -- 函数嵌套与闭包入门
- 函数嵌套与闭包
- javascript闭包入门理解(一)
- JavaScript闭包函数理解
- python之嵌套函数与闭包
- JavaScript函数与闭包
- Javascript 闭包与高阶函数 ( 一 )
- Javascript 闭包与高阶函数 ( 一 )
- Javascript 闭包与高阶函数 ( 一 )
- Javascript 闭包与高阶函数 ( 一 )
- Javascript 闭包与高阶函数 ( 一 )
- JavaScript函数闭包(closure) 的理解
- 一个例子理解javascript函数闭包
- JavaScript 嵌套函数中this的理解
- 嵌套函数和闭包
- Python嵌套函数\闭包
- Javascript基础_10立即执行函数,闭包函数理解
- 匿名函数、嵌套函数、闭包是怎么回事?
- 如何阅读linux c开源项目呢?
- python实现中文转成拼音
- 2013 华为校招机试题
- ADF Skin Editor的使用
- ffmpeg处理音频视频总结
- JavaScript函数理解(一) -- 函数嵌套与闭包入门
- SUSE Linux安装oracle10及问题解决
- Codeforces 506D Mr. Kitayuta's Colorful Graph 并查集+水水的分类讨论+水水的离线预处理
- 原始套接字运用
- 端口占用情况查看
- oracle:case 语句使用(用于select子句的case语句中可以使用in这个函数)
- 关于 Cannot retrieve repository metadata (repomd.xml) for repository: fedora 问题的解决
- 简单学习正则表达式
- 音视频技术 视频开发参考资料