javascript中几个容易混淆的概念总结


Posted in Javascript onApril 14, 2015

1.

var name = "The Window";
var object = {
name : "My Object",
getName: function(){
return this.name;
}
};

这里的getName()方法只简单地返回this.name 的值。以下是几种调用object.getName()的
方式以及各自的结果。
object.getName(); //"My Object"
(object.getName)(); //"My Object"
(object.getName = object.getName)(); //"The Window",在非严格模式下

第三种情况下(object.getName=object.getName);等价于var fn=(object.getName=object.getName);fn();

2.

function outputNumbers(count){
for (var i=0; i < count; i++){
//alert(i);
}
var i; //重新声明变量
alert(i); //计数
}

outputNumbers(5);

JavaScript 从来不会告诉你是否多次声明了同一个变量;遇到这种情况,它只会对后续的声明视而不
见(不过,它会执行后续声明中的变量初始化)。匿名函数可以用来模仿块级作用域并避免这个问题。

3.

function(){
//这里是块级作用域
}(); //出错!

这段代码会导致语法错误,是因为JavaScript 将function 关键字当作一个函数声明的开始,而函
数声明后面不能跟圆括号。然而,函数表达式的后面可以跟圆括号。要将函数声明转换成函数表达式,
只要像下面这样给它加上一对圆括号即可。

(function(){
//这里是块级作用域
})();

4.

function outputNumbers(count){
(function () {
for (var i=0; i < count; i++){
alert(i);
}
})();
alert(i); //导致一个错误!
}

在这个重写后的outputNumbers()函数中,我们在for 循环外部插入了一个私有作用域。在匿名
函数中定义的任何变量,都会在执行结束时被销毁。因此,变量i 只能在循环中使用,使用后即被销毁。
而在私有作用域中能够访问变量count,是因为这个匿名函数是一个闭包,它能够访问包含作用域中的
所有变量。

这种技术经常在全局作用域中被用在函数外部,从而限制向全局作用域中添加过多的变量和函数。
一般来说,我们都应该尽量少向全局作用域中添加变量和函数。在一个由很多开发人员共同参与的大型
应用程序中,过多的全局变量和函数很容易导致命名冲突。而通过创建私有作用域,每个开发人员既可
以使用自己的变量,又不必担心搞乱全局作用域。例如:

(function(){
var now = new Date();
if (now.getMonth() == 0 && now.getDate() == 1){
alert("Happy new year!");
}
})();

把上面这段代码放在全局作用域中,可以用来确定哪一天是1 月1 日;如果到了这一天,就会向用
户显示一条祝贺新年的消息。其中的变量now 现在是匿名函数中的局部变量,而我们不必在全局作用域
中创建它。

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
用javascript实现无刷新更新数据的详细步骤 asp
Dec 26 Javascript
JavaScript入门教程(2) JS基础知识
Jan 31 Javascript
js实现滑动触屏事件监听的方法
May 05 Javascript
10条建议帮助你创建更好的jQuery插件
May 18 Javascript
js精准的倒计时函数分享
Jun 29 Javascript
如何在JS中实现相互转换XML和JSON
Jul 19 Javascript
微信小程序 地图map实例详解
Jun 07 Javascript
vue-loader教程介绍
Jun 14 Javascript
基于angular2 的 http服务封装的实例代码
Jun 29 Javascript
jQuery Validate插件ajax方式验证输入值的实例
Dec 21 jQuery
Vue中fragment.js使用方法小结
Feb 17 Javascript
Javascript查看大图功能代码实现
May 07 Javascript
浅谈Sizzle的“编译原理”
Apr 14 #Javascript
深入探寻seajs的模块化与加载方式
Apr 14 #Javascript
javascript数组去重的方法汇总
Apr 14 #Javascript
JavaScript字符串常用类使用方法汇总
Apr 14 #Javascript
JavaScript 表单处理实现代码
Apr 13 #Javascript
JavaScript 事件绑定及深入
Apr 13 #Javascript
JavaScript 事件对象介绍
Apr 13 #Javascript
You might like
Windows下的PHP5.0详解
2006/11/18 PHP
jQuery extend 的简单实例
2013/09/18 Javascript
jQuery实现下拉框左右选择的简单实例
2014/02/22 Javascript
JavaScript中用字面量创建对象介绍
2014/12/31 Javascript
jQuery源码解读之addClass()方法分析
2015/02/20 Javascript
jquery插件pagination实现无刷新ajax分页
2015/09/30 Javascript
JavaScript中函数表达式和函数声明及函数声明与函数表达式的不同
2015/11/15 Javascript
HTML5+jQuery插件Quicksand实现超酷的星际争霸2兵种分类展示效果(附demo源码下载)
2016/05/25 Javascript
json格式的javascript对象用法分析
2016/07/04 Javascript
Vue.js Ajax动态参数与列表显示实现方法
2016/10/20 Javascript
jQuery EasyUI Accordion可伸缩面板组件使用详解
2017/02/28 Javascript
vue.js实现含搜索的多种复选框(附源码)
2017/03/23 Javascript
超出JavaScript安全整数限制的数字计算BigInt详解
2018/06/24 Javascript
vue实现城市列表选择功能
2018/07/16 Javascript
详解JavaScript添加给定的标签选项
2018/09/17 Javascript
taro小程序添加骨架屏的实现代码
2019/11/15 Javascript
JS判断浏览器类型与操作系统的方法分析
2020/04/30 Javascript
Python实现的维尼吉亚密码算法示例
2018/04/12 Python
Php多进程实现代码
2018/05/07 Python
详解Django的CSRF认证实现
2018/10/09 Python
浅谈python写入大量文件的问题
2018/11/09 Python
Python将json文件写入ES数据库的方法
2019/04/10 Python
python实现定时压缩指定文件夹发送邮件
2020/12/22 Python
详解Python3 对象组合zip()和回退方式*zip
2019/05/15 Python
Python发送邮件封装实现过程详解
2020/05/09 Python
Autopep8的使用(python自动编排工具)
2021/03/02 Python
大都会艺术博物馆商店:The Met Store
2018/06/22 全球购物
美国庭院家具购物网站:AlphaMarts
2019/04/10 全球购物
小加工厂管理制度
2014/01/21 职场文书
咖啡厅创业计划书范本
2014/01/22 职场文书
2014年最新学习全国两会精神心得
2014/03/17 职场文书
教师产假请假条
2014/04/10 职场文书
课内比教学心得体会
2014/09/09 职场文书
会计试用期自我评价
2014/09/19 职场文书
优秀范文:《但愿人长久》教学反思3篇
2019/10/24 职场文书
SpringBoot系列之MongoDB Aggregations用法详解
2022/02/12 MongoDB