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 相关文章推荐
xml分页+ajax请求数据源+dom取结果实例代码
Oct 31 Javascript
JQuery textlimit 显示用户输入的字符数 限制用户输入的字符数
May 14 Javascript
JavaScript 题型问答有答案参考
Feb 17 Javascript
Jquery 监视按键,按下回车键触发某方法的实现代码
May 11 Javascript
innerHTML属性,outerHTML属性,textContent属性,innerText属性区别详解
Mar 13 Javascript
js上传图片及预览功能实例分析
Apr 24 Javascript
javascript之with的使用(阿里云、淘宝使用代码分析)
Oct 11 Javascript
详解单页面路由工程使用微信分享及二次分享解决方案
Feb 22 Javascript
vue element-ui之怎么封装一个自己的组件的详解
May 20 Javascript
基于layui内置模块(element常用元素的操作)
Sep 20 Javascript
js实现图片上传到服务器和回显
Jan 19 Javascript
JavaScript 实现拖拽效果组件功能(兼容移动端)
Nov 11 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 smarty模版引擎中变量操作符及使用方法
2009/12/11 PHP
php debug 安装技巧
2011/04/30 PHP
一个刚完成的layout(拖动流畅,不受iframe影响)
2007/08/17 Javascript
js arguments.callee的应用代码
2009/05/07 Javascript
JavaScript 对象成员的可见性说明
2009/10/16 Javascript
不一样的文字闪烁 轮番闪烁
2009/11/11 Javascript
新老版本juqery获取radio对象的方法
2010/03/01 Javascript
jQuery ajax在GBK编码下表单提交终极解决方案(非二次编码方法)
2010/10/20 Javascript
JQuery+CSS提示框实现思路及代码(纯手工打造)
2013/05/07 Javascript
javascript 实现字符串反转的三种方法
2013/11/23 Javascript
Jquery实现自定义弹窗示例
2014/03/12 Javascript
使用ajaxfileupload.js实现ajax上传文件php版
2014/06/26 Javascript
js实现数字每三位加逗号的方法
2015/02/05 Javascript
jQuery手机拨号界面特效代码分享
2015/08/27 Javascript
详解VUE的状态控制与延时加载刷新
2017/03/27 Javascript
详谈for循环里面的break和continue语句
2017/07/20 Javascript
vue中动态绑定表单元素的属性方法
2018/02/23 Javascript
Vue实现按钮旋转和移动位置的实例代码
2018/08/09 Javascript
实例分析编写vue组件方法
2019/02/12 Javascript
vue.js 2.*项目环境搭建、运行、打包发布的详细步骤
2019/05/01 Javascript
python制作爬虫爬取京东商品评论教程
2016/12/16 Python
python实现微信接口(itchat)详细介绍
2017/10/23 Python
Python 判断是否为质数或素数的实例
2017/10/30 Python
pandas Dataframe行列读取的实例
2018/06/08 Python
python json.loads兼容单引号数据的方法
2018/12/19 Python
python实现全排列代码(回溯、深度优先搜索)
2020/02/26 Python
Python numpy多维数组实现原理详解
2020/03/10 Python
css3模拟jq点击事件的实例代码
2017/07/06 HTML / CSS
一款超酷的js+css3实现的3D标签云特效兼容ie7/8/9
2013/11/18 HTML / CSS
德国2018年度最佳在线药房:Bodfeld Apotheke
2019/11/04 全球购物
农业生产宣传标语
2014/10/08 职场文书
2014年设计师工作总结
2014/11/25 职场文书
晚会主持人开场白台词
2015/05/28 职场文书
北京青年观后感
2015/06/15 职场文书
js实现上传图片到服务器
2021/04/11 Javascript
MySQL 全文索引使用指南
2021/05/25 MySQL