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 相关文章推荐
网页中实现浏览器的最大,最小化和关闭按钮
Mar 12 Javascript
JSQL 批量图片切换的实现代码
May 05 Javascript
浅谈jQuery中对象遍历.eq().first().last().slice()方法
Nov 26 Javascript
JavaScript中的闭包介绍
Mar 15 Javascript
js电话号码验证方法
Sep 28 Javascript
基于JavaScript如何实现私有成员的语法特征及私有成员的实现方式
Oct 28 Javascript
angularjs 源码解析之injector
Aug 22 Javascript
NPM 安装cordova时警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to
Dec 20 Javascript
妙用Angularjs实现表格按指定列排序
Jun 23 Javascript
Vue实现web分页组件详解
Nov 28 Javascript
jQuery冲突问题解决方法
Jan 19 jQuery
几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍
Mar 17 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
php学习 字符串课件
2008/06/15 PHP
php调整gif动画图片尺寸示例代码分享
2013/12/05 PHP
PHP封装的Twitter访问类实例
2015/07/18 PHP
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
2015/12/19 PHP
PHP获取input输入框中的值去数据库比较显示出来
2016/11/16 PHP
写的htc的数据表格
2007/01/20 Javascript
JavaScript中的排序算法代码
2011/02/22 Javascript
JavaScript中的onerror事件概述及使用
2013/04/01 Javascript
js复制到剪切板的实例方法
2013/06/28 Javascript
jQuery.form插件的使用及跨域异步上传文件
2016/04/27 Javascript
JS控制弹出悬浮窗口(一览画面)的实例代码
2016/05/30 Javascript
AngularJS 单元测试(二)详解
2016/09/21 Javascript
URL中“#” “?” &amp;“”号的作用浅析
2017/02/04 Javascript
vue+ElementUI实现订单页动态添加产品数据效果实例代码
2017/07/13 Javascript
vue利用v-for嵌套输出多层对象,分别输出到个表的方法
2018/09/07 Javascript
Vue中UI组件库之Vuex与虚拟服务器初识
2019/05/07 Javascript
jsonp格式前端发送和后台接受写法的代码详解
2019/11/07 Javascript
vue 数据双向绑定的实现方法
2021/03/04 Vue.js
Python两个整数相除得到浮点数值的方法
2015/03/18 Python
Python实现感知器模型、两层神经网络
2017/12/19 Python
Python之reload流程实例代码解析
2018/01/29 Python
Python基于生成器迭代实现的八皇后问题示例
2018/05/23 Python
Python常见内置高效率函数用法示例
2018/07/31 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
2019/08/09 Python
Python中的None与 NULL(即空字符)的区别详解
2020/09/24 Python
Django模板报TemplateDoesNotExist异常(亲测可行)
2020/12/18 Python
Ray-Ban雷朋西班牙官网:全球领先的太阳眼镜品牌
2018/11/28 全球购物
Paradox London官方网站:英国新娘鞋婚礼鞋品牌
2019/08/29 全球购物
如何写一个Java类既可以用作applet也可以用作java应用
2016/01/18 面试题
音乐学院硕士生的自我评价分享
2013/11/01 职场文书
班长自荐书范文
2014/02/11 职场文书
后勤服务中心总经理工作职责
2014/03/03 职场文书
外国人聘用意向书
2014/04/01 职场文书
助人为乐模范事迹材料
2014/06/02 职场文书
详细总结Python常见的安全问题
2021/05/21 Python
「月刊Comic Alive」2022年5月号封面公开
2022/03/21 日漫