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 autocomplete 使用手册
Apr 01 Javascript
深入理解JavaScript系列(14) 作用域链介绍(Scope Chain)
Apr 12 Javascript
JS实现鼠标经过好友列表中的好友头像时显示资料卡的效果
Jul 02 Javascript
基于jquery实现的树形菜单效果代码
Sep 06 Javascript
JS显示日历和天气的方法
Mar 01 Javascript
Node.js数据库操作之查询MySQL数据库(二)
Mar 04 Javascript
前端自动化开发之Node.js的环境搭建教程
Apr 01 Javascript
Vue单文件组件的如何使用方式介绍
Jul 28 Javascript
Router解决跨模块下的页面跳转示例
Jan 11 Javascript
vue 封装 Adminlte3组件的实现
Mar 18 Javascript
antd-日历组件,前后禁止选择,只能选中间一部分的实例
Oct 29 Javascript
微信小程序开发数据缓存基础知识辨析及运用实例详解
Nov 06 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
图片存储与浏览一例(Linux+Apache+PHP+MySQL)
2006/10/09 PHP
163的邮件用phpmailer发送(实例详解)
2013/06/24 PHP
php连接函数implode与分割explode的深入解析
2013/06/26 PHP
ThinkPHP里用U方法调用js文件实例
2015/06/18 PHP
实例分析基于PHP微信网页获取用户信息
2017/11/24 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
document.body.scrollTop 值总为0的解决方法 比较常见的标准问题
2009/11/30 Javascript
jquery学习笔记二 实现可编辑的表格
2010/04/09 Javascript
使用pjax实现无刷新更改页面url
2015/02/05 Javascript
javascript简单实现滑动菜单效果的方法
2015/07/27 Javascript
JQuery+Ajax实现数据查询、排序和分页功能
2015/09/27 Javascript
JavaScript 七大技巧(二)
2015/12/13 Javascript
ES6扩展运算符的用途实例详解
2017/08/20 Javascript
JavaScript控制浏览器全屏显示简单示例
2018/07/05 Javascript
原生JS实现简单的无缝自动轮播效果
2018/09/26 Javascript
vue element-ui之怎么封装一个自己的组件的详解
2019/05/20 Javascript
JavaScript定时器设置、使用与倒计时案例详解
2019/07/08 Javascript
解决Vue中 父子传值 数据丢失问题
2019/08/27 Javascript
vue-router结合vuex实现用户权限控制功能
2019/11/14 Javascript
js实现拖拽与碰撞检测
2020/09/18 Javascript
解决idea开发遇到javascript动态添加html元素时中文乱码的问题
2020/09/29 Javascript
使用Python的Twisted框架编写非阻塞程序的代码示例
2016/05/25 Python
python实现微信自动回复功能
2018/04/11 Python
python之super的使用小结
2018/08/13 Python
python实现桌面壁纸切换功能
2019/01/21 Python
Django基础三之视图函数的使用方法
2019/07/18 Python
python rolling regression. 使用 Python 实现滚动回归操作
2020/06/08 Python
用JAVA实现一种排序,JAVA类实现序列化的方法(二种)
2014/04/23 面试题
幼儿园教师培训方案
2014/02/04 职场文书
《云雀的心愿》教学反思
2014/02/25 职场文书
员工生日活动方案
2014/08/24 职场文书
病危通知单
2015/04/17 职场文书
撤诉申请书法院范本
2015/05/18 职场文书
董事长开业致辞
2015/07/29 职场文书
《清澈的湖水》教学反思
2016/02/17 职场文书
TensorFlow中tf.batch_matmul()的用法
2021/06/02 Python