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 相关文章推荐
新页面打开实际尺寸的图片
Aug 25 Javascript
学习ExtJS Column布局
Oct 08 Javascript
JS与框架页的操作代码
Jan 17 Javascript
基于jquery的不规则矩形的排列实现代码
Apr 16 Javascript
禁止IE用右键的JS代码
Dec 30 Javascript
Ajax请求在数据量大的时候出现超时的解决方法
Feb 27 Javascript
js中的如何定位固定层的位置
Jun 15 Javascript
浅谈如何实现easyui的datebox格式化
Jun 12 Javascript
jQuery插件DataTable使用方法详解(.Net平台)
Dec 22 Javascript
纯javaScript、jQuery实现个性化图片轮播【推荐】
Jan 08 Javascript
浅谈Vue Element中Select下拉框选取值的问题
Mar 01 Javascript
详解ES6中的Map与Set集合
Mar 22 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
一个简单的MySQL数据浏览器
2006/10/09 PHP
php 删除记录实现代码
2009/03/12 PHP
PHP中对数组的一些常用的增、删、插操作函数总结
2015/11/27 PHP
PHP中实现中文字串截取无乱码的解决方法
2018/05/29 PHP
document对象execCommand的command参数介绍
2006/08/01 Javascript
jQuery帮助之筛选查找 children([expr])
2011/01/31 Javascript
jquery trim() 功能源代码
2011/02/14 Javascript
主页面中的两个iframe实现鼠标拖动改变其大小
2013/04/16 Javascript
js自定义鼠标右键的实现原理及源码
2014/06/23 Javascript
Bootstrap每天必学之栅格系统(布局)
2015/11/25 Javascript
Bootstrap编写导航栏和登陆框
2016/05/30 Javascript
JavaScript读二进制文件并用ajax传输二进制流的方法
2016/07/18 Javascript
JS正则匹配URL网址的方法(可匹配www,http开头的一切网址)
2017/01/06 Javascript
纯JS单页面赛车游戏制作代码分享
2017/03/03 Javascript
使用Dropzone.js上传的示例代码
2017/10/10 Javascript
微信小程序picker组件简单用法示例【附demo源码下载】
2017/12/05 Javascript
Webpack优化配置缩小文件搜索范围
2017/12/25 Javascript
JS中的算法与数据结构之栈(Stack)实例详解
2019/08/20 Javascript
微信小程序picker组件两列关联使用方式
2020/10/27 Javascript
[54:56]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第三局
2016/03/06 DOTA
在Django的模板中使用认证数据的方法
2015/07/23 Python
python+pandas生成指定日期和重采样的方法
2018/04/11 Python
Django项目实战之用户头像上传与访问的示例
2018/04/21 Python
python运行时强制刷新缓冲区的方法
2019/01/14 Python
python异步编程 使用yield from过程解析
2019/09/25 Python
Matplotlib scatter绘制散点图的方法实现
2020/01/02 Python
Python MySQL 日期时间格式化作为参数的操作
2020/03/02 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
2020/09/03 Python
Pycharm的Available Packages为空的解决方法
2020/09/18 Python
python如何实现word批量转HTML
2020/09/30 Python
Soft Cotton捷克:来自爱琴海棉花的浴袍
2017/02/01 全球购物
正隆泰信息技术有限公司上机题
2012/06/14 面试题
超市营业员求职简历的自我评价
2013/10/17 职场文书
2014年置业顾问工作总结
2014/11/17 职场文书
2015最新婚礼主持词
2015/06/30 职场文书
Python中zipfile压缩包模块的使用
2021/05/14 Python