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 IE 浏览器判定代码
Mar 21 Javascript
Javascript this 的一些学习总结
Aug 02 Javascript
关于图片的预加载过程中隐藏未知的
Dec 19 Javascript
JavaScript中的getTime()方法使用详解
Jun 10 Javascript
浅谈js的异步执行
Oct 18 Javascript
js实现二级导航功能
Mar 03 Javascript
javascript实现二叉树遍历的代码
Jun 08 Javascript
jQuery正则验证注册页面经典实例
Jun 10 jQuery
js实现随机点名小功能
Aug 17 Javascript
总结javascript三元运算符知识点
Sep 28 Javascript
如何解决js函数防抖、节流出现的问题
Jun 17 Javascript
npm的lock机制解析
Jun 20 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中调用ASP.NET的WebService的代码
2011/04/22 PHP
php 文件上传类代码
2011/08/06 PHP
php 多关键字 高亮显示实现代码
2012/04/23 PHP
PHP获取时间排除周六、周日的两个方法
2014/06/30 PHP
在Win7 中为php扩展配置Xcache
2014/10/08 PHP
php $_SESSION会员登录实例分享
2021/01/19 PHP
PHP7变量处理机制修改
2021/03/09 PHP
神奇的代码 通杀各种网站-可随意修改复制页面内容
2008/07/17 Javascript
jQuery 通过事件委派一次绑定多种事件,以减少事件冗余
2010/06/30 Javascript
jquery取消选择select下拉框示例代码
2014/02/22 Javascript
JS不能跨域借助jquery获取IP地址的方法
2014/08/20 Javascript
node.js中的fs.readdir方法使用说明
2014/12/17 Javascript
Js+php实现异步拖拽上传文件
2015/06/23 Javascript
bootstrap学习笔记之初识bootstrap
2016/06/21 Javascript
jquery的checkbox,radio,select等方法小结
2016/08/30 Javascript
jQuery监听文件上传实现进度条效果的方法
2016/10/16 Javascript
jquery对table做排序操作的实例演示
2017/08/10 jQuery
解决IE11 vue +webpack 项目中数据更新后页面没有刷新的问题
2018/09/25 Javascript
微信小程序如何获取群聊的openGid以及名称详解
2019/07/17 Javascript
JavaScript函数Call、Apply原理实例解析
2020/02/17 Javascript
Vue+elementUI实现多图片上传与回显功能(含回显后继续上传或删除)
2020/03/23 Javascript
解决vant-UI库修改样式无效的问题
2020/11/03 Javascript
python实现将pvr格式转换成pvr.ccz的方法
2015/04/28 Python
PyCharm的设置方法和第一个Python程序的建立
2019/01/16 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
2019/08/12 Python
利用python查看数组中的所有元素是否相同
2021/01/08 Python
一个入门级python爬虫教程详解
2021/01/27 Python
基于CSS3实现立方体自转效果
2016/03/01 HTML / CSS
Html5 Canvas实现图片标记、缩放、移动和保存历史状态功能 (附转换公式)
2020/03/18 HTML / CSS
WebSphere面试题:在WebSphere里面如何部署一个应用
2015/08/02 面试题
英文版餐饮运营管理求职信
2013/11/06 职场文书
建筑工地标语
2014/06/18 职场文书
活动总结模板大全
2015/05/11 职场文书
2016孝老爱亲模范事迹材料
2016/02/26 职场文书
详解Html5项目适配系统深色模式方案总结
2021/04/14 HTML / CSS
数据设计之权限的实现
2022/08/05 MySQL