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 相关文章推荐
兼容IE和FF的图片上传前预览js代码
May 28 Javascript
js添加table的行和列 具体实现方法
Jul 22 Javascript
解决Jquery鼠标经过不停滑动的问题
Mar 03 Javascript
js定时调用方法成功后并停止调用示例
Apr 08 Javascript
js换图片效果可进行定时操作
Jun 09 Javascript
JavaScript获取图片真实大小代码实例
Sep 24 Javascript
js实现文本框中输入文字页面中div层同步获取文本框内容的方法
Mar 03 Javascript
JS排序方法(sort,bubble,select,insert)代码汇总
Jan 30 Javascript
JS控制文本域只读或可写属性的方法
Jun 24 Javascript
javascript表达式和运算符详解
Feb 07 Javascript
node之本地服务器图片上传的方法示例
Mar 26 Javascript
js针对图片加载失败的处理方法分析
Aug 24 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中判断变量为空的几种方法分享
2013/08/26 PHP
linux下编译安装memcached服务
2014/08/03 PHP
ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼
2015/03/25 PHP
浅谈PHP中Stream(流)
2015/06/08 PHP
PHP设置头信息及取得返回头信息的方法
2016/01/25 PHP
javascript-简单的日历实现及Date对象语法介绍(附图)
2013/05/30 Javascript
js中的布尔运算符使用介绍
2013/11/20 Javascript
JavaScript 实现简单的倒计时弹窗DEMO附图
2014/03/05 Javascript
JavaScript实现常用二级省市级联下拉列表的方法
2015/03/25 Javascript
Bootstrap选项卡与Masonry插件的完美结合
2016/07/06 Javascript
BootStrap网页中代码显示用法详解
2016/10/21 Javascript
JS中数组重排序方法
2016/11/11 Javascript
简单实现js放大镜效果
2017/07/24 Javascript
关闭Vue计算属性自带的缓存功能方法
2018/03/02 Javascript
对mac下nodejs 更新到最新版本的最新方法(推荐)
2018/05/17 NodeJs
jQuery常见的遍历DOM操作详解
2018/09/05 jQuery
JavaScript实现简单音乐播放器
2020/04/17 Javascript
layui复选框限制选择个数的方法
2019/09/18 Javascript
详细分析vue响应式原理
2020/06/22 Javascript
如何利用vue实现波谱拟合详解
2020/11/05 Javascript
[06:45]2018DOTA2亚洲邀请赛 4.5 SOLO赛 Sccc vs Maybe
2018/04/06 DOTA
用Python编写一个国际象棋AI程序
2014/11/28 Python
Python中实现从目录中过滤出指定文件类型的文件
2015/02/02 Python
Python实现二叉搜索树
2016/02/03 Python
Python定义一个跨越多行的字符串的多种方法小结
2018/07/19 Python
Linux下Python安装完成后使用pip命令的详细教程
2018/11/22 Python
Python实现的旋转数组功能算法示例
2019/02/23 Python
python使用adbapi实现MySQL数据库的异步存储
2019/03/19 Python
PyQt5 QTableView设置某一列不可编辑的方法
2019/06/25 Python
对Django项目中的ORM映射与模糊查询的使用详解
2019/07/18 Python
Pytorch to(device)用法
2020/01/08 Python
pandas实现excel中的数据透视表和Vlookup函数功能代码
2020/02/14 Python
500行python代码实现飞机大战
2020/04/24 Python
NBA欧洲商店(法国):NBA Europe Store FR
2016/10/19 全球购物
2014年物资管理工作总结
2014/12/02 职场文书
根德5570型九灯四波段立体声收音机是电子管收音机的楷模 ? 再论5570
2022/04/05 无线电