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 相关文章推荐
js 实现图片预加载(js操作 Image对象属性complete ,事件onload 异步加载图片)
Mar 25 Javascript
6款经典实用的jQuery小插件及源码(对话框/提示工具等等)
Feb 04 Javascript
JavaScript显示当前文档最后修改日期的方法
Mar 19 Javascript
jQuery实现点击水纹波动动画
Apr 10 Javascript
jquery自定义插件开发之window的实现过程
May 06 Javascript
用JavaScript动态建立或增加CSS样式表的实现方法
May 20 Javascript
JS正则验证多个邮箱完整实例【邮箱用分号隔开】
Apr 19 Javascript
详解如何使用webpack打包Vue工程
May 27 Javascript
JS异步函数队列功能实例分析
Nov 28 Javascript
AngularJS监听ng-repeat渲染完成的方法
Mar 20 Javascript
js实现无缝轮播图插件封装
Jul 31 Javascript
vue 里面的 $forceUpdate() 强制实例重新渲染操作
Sep 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
php中解析带中文字符的url函数分享
2015/01/20 PHP
PHP实现在线阅读PDF文件的方法
2015/06/23 PHP
详解使用php调用微信接口上传永久素材
2017/04/11 PHP
THREE.JS入门教程(1)THREE.JS使用前了解
2013/01/24 Javascript
网站如何做到完全不需要jQuery也可以满足简单需求
2013/06/27 Javascript
javascript实现设置、获取和删除Cookie的方法
2015/06/01 Javascript
浅谈jquery.fn.extend与jquery.extend区别
2015/07/13 Javascript
JavaScript知识点整理
2015/12/09 Javascript
Angular在一个页面中使用两个ng-app的方法
2017/02/20 Javascript
微信小程序实现人脸识别
2018/05/25 Javascript
nodejs用gulp管理前端文件方法
2018/06/24 NodeJs
jquery插件懒加载的示例
2020/10/24 jQuery
[02:18]DOTA2英雄基础教程 育母蜘蛛
2014/01/20 DOTA
python入门之语句(if语句、while语句、for语句)
2015/01/19 Python
python实现可将字符转换成大写的tcp服务器实例
2015/04/29 Python
利用Python批量生成任意尺寸的图片
2016/08/29 Python
pandas string转dataframe的方法
2018/04/11 Python
Python画柱状统计图操作示例【基于matplotlib库】
2018/07/04 Python
基于pycharm导入模块显示不存在的解决方法
2018/10/13 Python
Python中new方法的详解
2019/01/15 Python
Python数据类型之String字符串实例详解
2019/05/08 Python
python多线程下信号处理程序示例
2019/05/31 Python
python代码编写计算器小程序
2020/03/30 Python
Python中包的用法及安装
2020/02/11 Python
matlab中二维插值函数interp2的使用详解
2020/04/22 Python
浅谈多卡服务器下隐藏部分 GPU 和 TensorFlow 的显存使用设置
2020/06/30 Python
CSS3中Transform动画属性用法详解
2016/07/04 HTML / CSS
html5基础教程常用技巧整理
2013/08/20 HTML / CSS
HTML5实现简单图片上传所遇到的问题及解决办法
2016/01/20 HTML / CSS
软件测试有哪些?什么是配置项?
2012/02/12 面试题
个人教师自我评价范文
2013/12/02 职场文书
创建卫生先进单位实施方案
2014/03/10 职场文书
做一个有道德的人活动方案
2014/08/25 职场文书
2015年师德表现自我评价
2015/03/05 职场文书
如何制定销售人员薪酬制度?
2019/07/09 职场文书
一文搞懂Redis中String数据类型
2022/04/03 Redis