javascript 模仿块级作用域
2015-08-13 11:06
459 查看
转自JavaScript高级程序设计i(第三版):
javascript没有块级作用域的概念,只有两个环境,函数环境和全局环境。
Javascript从来不会告诉你是否多次声明了一个变量;遇到这种情况,它只会对后续的声明视而不见。
但是,如果在后续声明中对变量进行了初始化,也是会执行的。
那么,应该如何模仿块级作用域呢?
用作块级作用域(通常称为私有作用域)的匿名函数的语法如下所示:
(function(){
//这里是块级作用域;
})();
但是,注意,以下代码会导致错误:
function(){
//这里是块级作用域;
}();//出错!!!
因为Javascript将function关键字当作一个函数声明的开始,而函数声明的后面不能跟圆括号。
但是,函数表达式的后面可以跟圆括号。要将函数声明转换为函数表达式,只需要像下文一样给它加上一对圆括号。
(function(){
//这里是块级作用域;
})();
无论什么地方,只要临时需要一些变量,就可以使用私有作用域。
在匿名函数中定义的任何变量,都会在执行结束的时候被销毁。
这种做法可以减少闭包占用的内存问题,因为没有指向匿名函数的引用。只要函数执行完毕,就可以立即销毁其作用域了。
javascript没有块级作用域的概念,只有两个环境,函数环境和全局环境。
function test(){ for(var i=0;i<10;i++){ } alert(i);//10 }
function test(){ for(var i=0;i<10;i++){ } var i;//重新声明变量 alert(i);//10 }
Javascript从来不会告诉你是否多次声明了一个变量;遇到这种情况,它只会对后续的声明视而不见。
但是,如果在后续声明中对变量进行了初始化,也是会执行的。
function test(){ for(var i=0;i<10;i++){ } var i=0;//重新声明变量 alert(i);//0 }
那么,应该如何模仿块级作用域呢?
用作块级作用域(通常称为私有作用域)的匿名函数的语法如下所示:
(function(){
//这里是块级作用域;
})();
但是,注意,以下代码会导致错误:
function(){
//这里是块级作用域;
}();//出错!!!
因为Javascript将function关键字当作一个函数声明的开始,而函数声明的后面不能跟圆括号。
但是,函数表达式的后面可以跟圆括号。要将函数声明转换为函数表达式,只需要像下文一样给它加上一对圆括号。
(function(){
//这里是块级作用域;
})();
无论什么地方,只要临时需要一些变量,就可以使用私有作用域。
function test(){ (function(){ for(var i=0;i<10;i++){ } })(); alert(i);//导致一个错误!!! }
在匿名函数中定义的任何变量,都会在执行结束的时候被销毁。
这种做法可以减少闭包占用的内存问题,因为没有指向匿名函数的引用。只要函数执行完毕,就可以立即销毁其作用域了。
相关文章推荐
- JavaScript简单判断复选框是否选中及取出值的方法
- 关于js的replace
- 利用js实现table的无刷新静态内容过滤
- Javascript 遍历对象的属性
- JavaScript实现将文本框的值插入指定位置的方法
- jstl c标签 ”test does not support runtime expressions“
- JS 通过正则表达式获取URL中的参数
- js自执行函数
- js自执行函数
- javascript递归与闭包
- webx配置html转义构建JSONP跨域
- 解析json数组
- Volley获取json数组
- javascript高级程序设计知识整理(2)
- js实现仿Discuz文本框弹出层效果
- jsp页面中jstl标签详解
- javascript 代码压缩
- Gson 转换树型结构的实例
- 深入学习JavaScript中的原型prototype
- js表单验证