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 相关文章推荐
jQuery表格行换色的三种实现方法
Jun 27 Javascript
JavaScript设计模式之单例模式实例
Sep 24 Javascript
jQuery实现的网页右下角tab样式在线客服效果代码
Oct 23 Javascript
JavaScript 七大技巧(一)
Dec 13 Javascript
解决jQuery ajax请求在IE6中莫名中断的问题
Jun 20 Javascript
bootstrap laydate日期组件使用详解
Jan 04 Javascript
AngularJs上传前预览图片的实例代码
Jan 20 Javascript
JavaScript阻止表单提交方法(附代码)
Aug 15 Javascript
layer子层给父层页面元素赋值,以达到向父层页面传值的效果实例
Sep 22 Javascript
JS声明对象时属性名加引号与不加引号的问题及解决方法
Feb 16 Javascript
vue项目持久化存储数据的实现代码
Oct 01 Javascript
vuejs2.0运用原生js实现简单拖拽元素功能
Aug 21 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
Syphon 秘笈
2021/03/03 冲泡冲煮
ThinkPHP框架任意代码执行漏洞的利用及其修复方法
2014/07/04 PHP
ThinkPHP独立分组使用的注意事项
2014/11/25 PHP
thinkPHP下的widget扩展用法实例分析
2015/12/26 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
一种JavaScript的设计模式
2006/11/22 Javascript
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(上:事件篇)
2010/03/24 Javascript
Javascript调用C#代码
2011/01/17 Javascript
关于jquery.validate1.9.0前台验证的使用介绍
2013/04/26 Javascript
js中单引号与双引号冲突问题解决方法
2013/10/04 Javascript
JavaScript实现倒计时代码段Item1(非常实用)
2015/11/03 Javascript
原生js实现打字动画游戏
2017/02/04 Javascript
jQuery插件HighCharts实现气泡图效果示例【附demo源码】
2017/03/13 Javascript
解决bootstrap下拉菜单点击立即隐藏bug的方法
2017/06/13 Javascript
JS实现的全排列组合算法示例
2017/10/09 Javascript
利用SpringMVC过滤器解决vue跨域请求的问题
2018/02/10 Javascript
vue template中slot-scope/scope的使用方法
2018/09/06 Javascript
JQuery中DOM节点的操作与访问方法实例分析
2019/12/23 jQuery
一起深入理解js中的事件对象
2021/02/06 Javascript
用python 制作图片转pdf工具
2015/01/30 Python
python中dir函数用法分析
2015/04/17 Python
python3之微信文章爬虫实例讲解
2017/07/12 Python
Python基于hashlib模块的文件MD5一致性加密验证示例
2018/02/10 Python
pandas string转dataframe的方法
2018/04/11 Python
python3安装speech语音模块的方法
2018/12/24 Python
python使用装饰器作日志处理的方法
2019/07/11 Python
python生成13位或16位时间戳以及反向解析时间戳的实例
2020/03/03 Python
浅谈CSS3 动画卡顿解决方案
2019/01/02 HTML / CSS
Hotels.com中国区:好订网
2016/08/18 全球购物
环保倡议书
2014/04/14 职场文书
教师一岗双责责任书
2014/04/16 职场文书
大气污染防治方案
2014/05/19 职场文书
党员民主生活会个人整改措施材料
2014/09/16 职场文书
实习协议书
2015/01/27 职场文书
学生会任命书范本
2015/09/21 职场文书
导游词之四川熊猫基地
2020/01/13 职场文书