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 相关文章推荐
javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
Apr 12 Javascript
jquery.fileEveryWhere.js 一个跨浏览器的file显示插件
Oct 24 Javascript
JS实现可直接显示网页代码运行效果的HTML代码预览功能实例
Aug 06 Javascript
angular.js + require.js构建模块化单页面应用的方法步骤
Jul 19 Javascript
vue-image-crop基于Vue的移动端图片裁剪组件示例
Aug 28 Javascript
Node.js console控制台简单用法分析
Jan 04 Javascript
微信小程序实现联动选择器
Feb 15 Javascript
微信小程序用户授权,以及判断登录是否过期的方法
May 10 Javascript
JavaScript canvas绘制折线图
Feb 18 Javascript
JavaScript文档加载模式以及元素获取
Jul 28 Javascript
JS实现密码框效果
Sep 10 Javascript
JavaScript通如何过RGraph实现动态仪表盘
Oct 15 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类
2006/10/09 PHP
PHP动态分页函数,PHP开发分页必备啦
2011/11/07 PHP
jquery调用wcf并展示出数据的方法
2011/07/07 Javascript
JavaScript中的View-Model使用介绍
2011/08/11 Javascript
JavaScript中的稀疏数组与密集数组[译]
2012/09/17 Javascript
jquery实现兼容IE8的异步上传文件
2015/06/15 Javascript
javascript设计模式之module(模块)模式
2016/08/19 Javascript
关于JavaScript和jQuery的类型判断详解
2016/10/08 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
2016/12/19 Javascript
jQuery控制元素隐藏和显示
2017/03/03 Javascript
nodejs集成sqlite使用示例
2017/06/05 NodeJs
JavaScript实现简单的双色球(实例讲解)
2017/07/31 Javascript
angularjs中$http异步上传Excel文件方法
2018/02/23 Javascript
Vux+Axios拦截器增加loading的问题及实现方法
2018/11/08 Javascript
基于Vue实现电商SKU组合算法问题
2019/05/29 Javascript
Vue.js实现大转盘抽奖总结及实现思路
2019/10/09 Javascript
JavaScript单线程和任务队列原理解析
2020/02/04 Javascript
在vue中配置不同的代理同时访问不同的后台操作
2020/09/11 Javascript
JavaScript实现商品评价五星好评
2020/11/30 Javascript
python正则表达式之作业计算器
2016/03/18 Python
详解字典树Trie结构及其Python代码实现
2016/06/03 Python
python生成式的send()方法(详解)
2017/05/08 Python
python实现的二叉树定义与遍历算法实例
2017/06/30 Python
pygame游戏之旅 添加游戏介绍
2018/11/20 Python
Python类的继承、多态及获取对象信息操作详解
2019/02/28 Python
Django urls.py重构及参数传递详解
2019/07/23 Python
解决Jupyter无法导入已安装的 module问题
2020/04/17 Python
用python实现前向分词最大匹配算法的示例代码
2020/08/06 Python
shell变量的作用空间是什么
2013/08/17 面试题
优秀应届生推荐信
2013/11/09 职场文书
怎样写好自我评价呢?
2014/02/16 职场文书
离职保密承诺书
2014/05/28 职场文书
小学语文教研活动总结
2014/07/01 职场文书
入党积极分子党小组意见
2015/06/02 职场文书
2015年科普工作总结
2015/07/23 职场文书
nginx请求限制配置方法
2021/07/09 Servers