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 获取计算后的样式写法及注意事项
Feb 25 Javascript
javascript实现锁定网页、密码解锁效果(类似系统屏幕保护效果)
Aug 15 Javascript
javascript实现复制与粘贴操作实例
Oct 16 Javascript
学习JavaScript设计模式(策略模式)
Nov 26 Javascript
Jquery 1.9.1源码分析系列(十二)之筛选操作
Dec 02 Javascript
Jquery实现$.fn.extend和$.extend函数
Apr 14 Javascript
JS查找字符串中出现次数最多的字符
Sep 05 Javascript
jQuery实现页面下拉100像素出现悬浮窗口的方法
Sep 05 Javascript
原生JS实现图片翻书效果
Feb 16 Javascript
基于JavaScript实现带数据验证和复选框的表单提交
Aug 23 Javascript
bootstrap treeview 树形菜单带复选框及级联选择功能
Jun 08 Javascript
JavaScript 中的无穷数(Infinity)详解
Feb 13 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
《被神捡到的男人》动画化计划进行中!
2020/03/06 日漫
PHP HTML代码串 截取实现代码
2009/06/29 PHP
php字符串操作常见问题小结
2016/10/11 PHP
php统计数组不同元素的个数的实例方法
2019/09/26 PHP
laravel 解决强制跳转 https的问题
2019/10/22 PHP
JS中style属性
2006/10/11 Javascript
JSON 入门指南 想了解json的朋友可以看下
2009/08/26 Javascript
js 判断checkbox是否选中的实现代码
2010/11/23 Javascript
jQuery 联动日历实现代码
2012/05/31 Javascript
jQuery Deferred和Promise创建响应式应用程序详细介绍
2013/03/05 Javascript
Js调用Java方法并互相传参的简单实例
2016/08/11 Javascript
node网页分段渲染详解
2016/09/05 Javascript
深入理解jQuery.data() 的实现方式
2016/11/30 Javascript
基于JavaScript实现熔岩灯效果导航菜单
2017/01/04 Javascript
原生js实现轮播图的示例代码
2017/02/20 Javascript
angular中实现控制器之间传递参数的方式
2017/04/24 Javascript
vue 父组件调用子组件方法及事件
2018/03/29 Javascript
JS加密插件CryptoJS实现的Base64加密示例
2020/08/16 Javascript
通过vue-cli3构建一个SSR应用程序的方法
2018/09/13 Javascript
Makefile/cmake/node-gyp中区分判断不同平台的方法
2018/12/18 Javascript
[45:18]2018DOTA2亚洲邀请赛 4.3 突围赛 Optic vs iG 第一场
2018/04/04 DOTA
Python工程师面试题 与Python基础语法相关
2016/01/14 Python
Apache如何部署django项目
2017/05/21 Python
Python3模拟登录操作实例分析
2019/03/12 Python
对Python获取屏幕截图的4种方法详解
2019/08/27 Python
django ORM之values和annotate使用详解
2020/05/19 Python
在keras里面实现计算f1-score的代码
2020/06/15 Python
彪马法国官网:PUMA法国
2019/12/15 全球购物
澳大利亚最便宜的网上药房:Chemist Warehouse
2020/01/30 全球购物
Farfetch澳大利亚官网:Farfetch Australia
2020/04/26 全球购物
社区七一党员活动方案
2014/01/25 职场文书
工商行政管理专业求职书
2014/05/23 职场文书
简单租房协议书范本
2014/08/20 职场文书
交通处罚决定书
2015/06/24 职场文书
微信小程序实现录音Record功能
2021/05/09 Javascript
opencv读取视频并保存图像的方法
2021/06/04 Python