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 相关文章推荐
extjs 列表框(multiselect)的动态添加列表项的方法
Jul 31 Javascript
jquery 常用操作方法
Jan 28 Javascript
如何让easyui gridview 宽度自适应窗口改变及fitColumns应用
Jan 25 Javascript
Jquery 的outerHeight方法使用介绍
Sep 11 Javascript
jQuery的缓存机制浅析
Jun 07 Javascript
dul无法加载bootstrap实现unload table/user恢复
Sep 29 Javascript
Bootstrap表单使用方法详解
Feb 17 Javascript
Node.js如何使用Diffie-Hellman密钥交换算法详解
Sep 05 Javascript
js实现QQ面板拖拽效果(慕课网DOM事件探秘)(全)
Sep 19 Javascript
原生js实现省市区三级联动代码分享
Feb 12 Javascript
小程序点餐界面添加购物车左右摆动动画
Sep 23 Javascript
如何用JavaScript学习算法复杂度
Apr 30 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设计模式之命令模式的深入解析
2013/06/13 PHP
php实现两个数组相加的方法
2015/02/17 PHP
php上传图片客户端和服务器端实现方法
2015/03/30 PHP
php中header设置常见文件类型的content-type
2015/06/23 PHP
JavaScript 函数调用规则
2009/09/14 Javascript
jQuery的链式调用浅析
2010/12/03 Javascript
js滚动条回到顶部的代码
2011/12/06 Javascript
Java/JS获取flash高宽的具体方法
2013/12/27 Javascript
js事件监听机制(事件捕获)总结
2014/08/08 Javascript
TinyMCE提交AjaxForm获取不到数据的解决方法
2015/03/05 Javascript
javascript实现ecshop搜索框键盘上下键切换控制
2015/03/18 Javascript
javascript实现一个数值加法函数
2015/06/26 Javascript
BootStrap下拉框在firefox浏览器界面不友好的解决方案
2016/08/18 Javascript
js实现随机抽选效果、随机抽选红色球效果
2017/01/13 Javascript
微信小程序之网络请求简单封装实例详解
2017/06/28 Javascript
jquery 一键复制到剪切板的实例
2017/09/20 jQuery
js最实用string(字符串)类型的使用及截取与拼接详解
2019/04/26 Javascript
JavaScript实现抖音罗盘时钟
2019/10/11 Javascript
[49:35]KG vs SECRET 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
举例讲解Python设计模式编程中的访问者与观察者模式
2016/01/26 Python
Python实现完整的事务操作示例
2017/06/20 Python
Python调用C++,通过Pybind11制作Python接口
2018/10/16 Python
解决python3 pika之连接断开的问题
2018/12/18 Python
Python饼状图的绘制实例
2019/01/15 Python
在Django的View中使用asyncio的方法
2019/07/12 Python
django创建最简单HTML页面跳转方法
2019/08/16 Python
详解Python中import机制
2020/09/11 Python
No module named ‘win32gui‘ 的解决方法(踩坑之旅)
2021/02/18 Python
苹果台湾官网:Apple台湾
2019/01/05 全球购物
联强国际笔试题面试题
2013/07/10 面试题
初中女生自我鉴定
2013/12/19 职场文书
孕妇离婚协议书范本
2014/11/20 职场文书
年会邀请函范文
2015/01/30 职场文书
Python爬虫基础之爬虫的分类知识总结
2021/05/13 Python
MySQL 视图(View)原理解析
2021/05/19 MySQL
基于PyQt5制作一个群发邮件工具
2022/04/08 Python