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 + Flex 通过拖拽方式动态改变图片的代码
Aug 03 Javascript
基于jquery的9行js轻松实现tab控件示例
Oct 12 Javascript
js实现的map方法示例代码
Jan 13 Javascript
JS方法调用括号的问题探讨
Jan 24 Javascript
基于iframe实现类似于ajax的页面无刷新
May 31 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 图片库
Jan 09 Javascript
javascript实现数组去重的多种方法
Mar 14 Javascript
微信小程序 获取相册照片实例详解
Nov 16 Javascript
jQuery Validate设置onkeyup验证的实例代码
Dec 09 Javascript
JS实现的随机排序功能算法示例
Jun 09 Javascript
React Native 环境搭建的教程
Aug 19 Javascript
JS 封装父页面子页面交互接口的实例代码
Jun 25 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截取字符串并保留完整xml标签的函数代码
2013/02/06 PHP
基于php权限分配的实现代码
2013/04/28 PHP
php中Y2K38的漏洞解决方法实例分析
2014/09/22 PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
2016/07/20 PHP
strpos() 函数判断字符串中是否包含某字符串的方法
2019/01/16 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
jQuery 使用个人心得
2009/02/26 Javascript
javascript 多种搜索引擎集成的页面实现代码
2010/01/02 Javascript
appendChild() 或 insertBefore()使用与区别介绍
2013/10/11 Javascript
jQuery模拟原生态App上拉刷新下拉加载更多页面及原理
2015/08/10 Javascript
仿京东快报向上滚动的实例
2017/12/13 Javascript
Vue组件和Route的生命周期实例详解
2018/02/10 Javascript
vuex中的 mapState,mapGetters,mapActions,mapMutations 的使用
2018/04/13 Javascript
vue.js学习笔记之v-bind和v-on解析
2018/05/03 Javascript
js与jQuery实现获取table中的数据并拼成json字符串操作示例
2018/07/12 jQuery
Vue Cli 3项目使用融云IM实现聊天功能的方法
2019/04/19 Javascript
关于微信小程序map组件z-index的层级问题分析
2019/07/09 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
2019/07/31 Javascript
小程序选项卡以及swiper套用(跨页面)
2020/06/19 Javascript
Element Rate 评分的使用方法
2020/07/27 Javascript
[01:33:30]DOTA2-DPC中国联赛 正赛 RNG vs Phoenix BO3 第二场 2月5日
2021/03/11 DOTA
Python中if __name__ == '__main__'作用解析
2015/06/29 Python
关于Django显示时间你应该知道的一些问题
2017/12/25 Python
Python中six模块基础用法
2019/12/08 Python
Keras—embedding嵌入层的用法详解
2020/06/10 Python
PUMA官方商城:世界领先的运动品牌之一
2016/11/16 全球购物
Groupon西班牙官方网站:在线优惠券和交易,节省高达70%
2021/03/13 全球购物
房屋鉴定委托书范本
2014/09/23 职场文书
2014年小学安全工作总结
2014/12/04 职场文书
教师个人成长总结
2015/02/11 职场文书
2016公司年会通知范文
2015/04/25 职场文书
观后感开头
2015/06/19 职场文书
小学生暑假安全保证书
2015/07/13 职场文书
在 HTML 页面中使用 React的场景分析
2022/01/18 Javascript
Python+OpenCV实现在图像上绘制矩形
2022/03/21 Python
python如何利用cv2.rectangle()绘制矩形框
2022/12/24 Python