JS中的作用域和闭包
2014-06-02 20:05
106 查看
作用域:在编程语言中,作用域控制着变量与参数的可见性及生命周期。JS确实有函数作用域,那意味着定义在函数中的参数和变量在函数外部是不可见的,而且在一个函数中的任何位置定义的变量在该函数中的任何地方都是可见的。
闭包:作用域的好处是内部函数可以访问定义它们的外部函数的参数和变量(除了this和arguments)。我们通过调用一个函数的形式去初始化一个函数myObject,该函数将返回一个对象。此函数定义了一个value变量。该变量对increment和getValue方法总是可用的,但函数的作用域使得它对其他程序来说是不可见的。
我们并没有把一个函数赋值给myObject。我们是把调用该函数后返回的结果赋值给它。注意最后一行的()。该函数返回一个包含两个方法的对象,并且这些方法继续享有访问value变量的特权。上例中getValue方法可以访问它被创建时所处的上下文环境。这被称为闭包。理解内部函数能访问外部函数的实际变量而无须复制是很重要的。
var a = 1; var fs = function (){ var b = 2; var c = 4 var fun = function (){ var c = 3; alert(a) //输出1 alert(b) //输出2 alert(c) //输出3 } fun(); } fs();
闭包:作用域的好处是内部函数可以访问定义它们的外部函数的参数和变量(除了this和arguments)。我们通过调用一个函数的形式去初始化一个函数myObject,该函数将返回一个对象。此函数定义了一个value变量。该变量对increment和getValue方法总是可用的,但函数的作用域使得它对其他程序来说是不可见的。
//返回一个对象 var myObject = (function (){ var value = 0; return { increment: function (inc){ value += typeof inc === 'number' ? inc : 1; }, getValue: function (){ return value; } } })();
我们并没有把一个函数赋值给myObject。我们是把调用该函数后返回的结果赋值给它。注意最后一行的()。该函数返回一个包含两个方法的对象,并且这些方法继续享有访问value变量的特权。上例中getValue方法可以访问它被创建时所处的上下文环境。这被称为闭包。理解内部函数能访问外部函数的实际变量而无须复制是很重要的。
相关文章推荐
- js中作用域和闭包
- JavaScript高级程序设计(第2版) 学习笔记:(二)js函数作用域与闭包
- js的作用域、作用域链、闭包
- js中作用域与函数闭包
- JS变量作用域、闭包
- 【JavaScript】熟悉js的继承链,作用域,闭包
- js 闭包以及就是变量作用域
- js变量作用域,闭包。
- Js变量作用域闭包
- JS——作用域 && 闭包
- 变量的作用域--js闭包
- 关于JS变量的作用域,作用域链与闭包
- js加强:js引擎,变量作用域,arguments对象,特殊函数,闭包
- js(三)---函数的作用域与闭包
- JS的作用域、闭包原理以及性能问题
- JS的的作用域和闭包
- js闭包实现块级作用域和私有变量的访问
- JS中的作用域与闭包:this,var,(function () {})
- js 中作用域、闭包的总结
- 详解JS的作用域和闭包