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 相关文章推荐
Gird组件 Part-3:范例RSSFeed Viewer
Mar 10 Javascript
uploadify在Firefox下丢失session问题的解决方法
Aug 07 Javascript
javascript版2048小游戏
Mar 18 Javascript
jQuery实现Tab菜单滚动切换的方法
Sep 21 Javascript
JS取模、取商及取整运算方法示例
Oct 13 Javascript
老生常谈原生JS执行环境与作用域
Nov 22 Javascript
详解vue2.0监听属性的使用心得及搭配计算属性的使用
Jul 18 Javascript
详解webpack编译速度提升之DllPlugin
Feb 05 Javascript
Nuxt v-bind绑定img src不显示的解决
Dec 05 Javascript
javascript实现点击星星小游戏
Dec 24 Javascript
浅析JavaScript 函数柯里化
Sep 08 Javascript
解决vue-router 嵌套路由没反应的问题
Sep 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
PHP中使用php://input处理相同name值的表单数据
2015/02/03 PHP
PHP封装CURL扩展类实例
2015/07/28 PHP
PHP集成环境XAMPP的安装与配置
2018/11/13 PHP
基于jQuery+HttpHandler实现图片裁剪效果代码(适用于论坛, SNS)
2011/09/02 Javascript
HTML上传控件取消选择
2013/03/06 Javascript
div+css+js实现无缝滚动类似marquee无缝滚动兼容firefox
2013/08/29 Javascript
Jquery实现自定义tooltip示例代码
2014/02/12 Javascript
jQuery实现复选框全选/取消全选/反选及获得选择的值
2014/06/12 Javascript
js设置cookie过期当前时间减去一秒相当于立即过期
2014/09/04 Javascript
初步了解javascript面向对象
2015/11/09 Javascript
如何用JS判断两个数字的大小
2016/07/21 Javascript
Avalonjs双向数据绑定与监听的实例代码
2017/06/23 Javascript
angular框架实现全选与单选chekbox的自定义
2017/07/06 Javascript
vue 实现移动端键盘搜索事件监听
2019/11/06 Javascript
js实现简单音乐播放器
2020/06/30 Javascript
JavaScript中常用的3种弹出提示框(alert、confirm、prompt)
2020/11/10 Javascript
[06:16]《DAC最前线》之地区预选赛全面回顾
2015/01/19 DOTA
[02:42]DOTA2城市挑战赛收官在即 四强之争风起云涌
2018/06/05 DOTA
[00:10]DOTA2 TI9勇士令状明日上线
2019/05/07 DOTA
Python实现的几个常用排序算法实例
2014/06/16 Python
python实现的文件夹清理程序分享
2014/11/22 Python
python比较两个列表是否相等的方法
2015/07/28 Python
浅谈Django REST Framework限速
2017/12/12 Python
在Python函数中输入任意数量参数的实例
2019/07/16 Python
python中删除某个元素的方法解析
2019/11/05 Python
pytorch中的自定义反向传播,求导实例
2020/01/06 Python
解决Keras自带数据集与预训练model下载太慢问题
2020/06/12 Python
简单了解Python变量作用域正确使用方法
2020/06/12 Python
Jupyter Notebook添加代码自动补全功能的实现
2021/01/07 Python
如何写一个Java类既可以用作applet也可以用作java应用
2016/01/18 面试题
优秀经理获奖感言
2014/03/04 职场文书
2014三八妇女节活动总结范文四篇
2014/03/09 职场文书
纪律教育学习月活动总结
2014/08/27 职场文书
收入及婚姻状况证明
2014/11/20 职场文书
中学生勤俭节约倡议书
2015/04/29 职场文书
为什么说餐饮很难做,是因为你不了解这些新规则
2019/08/20 职场文书