手把手教你在 JavaScript 中模仿块级作用域
2017-03-30 14:44
316 查看
JavaScript 没有块级作用域的概念,所以在块语句中定义的变量,实际上包含在函数中:
这里的 i 是定义在函数 outputNumbers() 的活动对象中的,因此从它定义开始,可以在函数内部随意地访问它,即使像这样重新声明同一个变量,也不会改变它的值,JavaScript对这种情况只会视而不见:
可以使用匿名函数来模仿块级作用域,语法如下:
上述代码定义并立即调用了一个匿名函数。这里把函数声明放在一对圆括号中,这是函数表达式的写法。紧随其后的另一对圆括号会立即调用这个函数。
想要在某些地方使用一些临时变量,就可以使用这种语法写出来的私有作用域:
我们在 for 循环外部插入了一个私有作用域,因此在匿名函数中定义的任何变量,都会在执行结束后被销毁。而且因为这是一个匿名函数闭包,所以它能够访问变量 count。
这种技术经常用于在全局作用域中被用在函数外部,从而限制在全局作用域中添加过多的变量和函数。
[b]注意:<
4000
/strong> 这样做可以减少闭包占用的内存,而且因为没有指向匿名函数的引用,所以只要函数执行完毕,就可以立即销毁作用域链咯,是不是很棒啊 O(∩_∩)O~
function outputNumbers(count) { for (var i = 0; i < count; i++) { console.log(i); } console.log(i);//10 } outputNumbers(10);
这里的 i 是定义在函数 outputNumbers() 的活动对象中的,因此从它定义开始,可以在函数内部随意地访问它,即使像这样重新声明同一个变量,也不会改变它的值,JavaScript对这种情况只会视而不见:
function outputNumbers(count) { for (var i = 0; i < count; i++) { console.log(i); } var i;//重新声明变量 console.log(i);//10(值不会被改变) } outputNumbers(10);
可以使用匿名函数来模仿块级作用域,语法如下:
(function(){ //块级作用域 })();
上述代码定义并立即调用了一个匿名函数。这里把函数声明放在一对圆括号中,这是函数表达式的写法。紧随其后的另一对圆括号会立即调用这个函数。
想要在某些地方使用一些临时变量,就可以使用这种语法写出来的私有作用域:
function outputNumbers(count) { (function () { for (var i = 0; i < count; i++) { console.log(i); } })(); console.log(i);//错误 } outputNumbers(10);
我们在 for 循环外部插入了一个私有作用域,因此在匿名函数中定义的任何变量,都会在执行结束后被销毁。而且因为这是一个匿名函数闭包,所以它能够访问变量 count。
这种技术经常用于在全局作用域中被用在函数外部,从而限制在全局作用域中添加过多的变量和函数。
[b]注意:<
4000
/strong> 这样做可以减少闭包占用的内存,而且因为没有指向匿名函数的引用,所以只要函数执行完毕,就可以立即销毁作用域链咯,是不是很棒啊 O(∩_∩)O~
相关文章推荐
- JavaScript之模仿块级作用域
- JavaScript模仿块级作用域与私有变量
- Javascript中模仿块级作用域
- javascript 模仿块级作用域
- Javascript中模仿块级作用域
- JavaScript 模仿块级作用域和私有变量
- javascript中的闭包、模仿块级作用域和私有变量
- 浅谈模仿JavaScript的块级作用域
- Javascript之匿名函数(模仿块级作用域)
- JavaScript:模仿块级作用域
- JavaScript模仿块级作用域
- Javascript中模仿块级作用域
- Javascript中没有块级作用域(模仿)
- Javascript中没有块级作用域(模仿)
- Javascript模仿块级作用域
- JavaScript匿名函数之模仿块级作用域
- JavaScript学习-模仿块级作用域
- javaScript没有块级作用域
- JavaScript的作用域和块级作用域概念理解
- JS之 函数模仿块级作用域,私有变量,模块模式