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中获取未知对象属性的代码
Apr 27 Javascript
弹出层之1:JQuery.Boxy (一) 使用介绍
Oct 06 Javascript
js使用html()或text()方法获取设置p标签的显示的值
Aug 01 Javascript
node.js中的events.emitter.once方法使用说明
Dec 10 Javascript
javascript实现获取浏览器版本、操作系统类型
Jan 29 Javascript
全面解析Bootstrap表单使用方法(表单样式)
Nov 24 Javascript
js实现日历与定时器
Feb 22 Javascript
ionic App问题总结系列之ionic点击系统返回键退出App
Aug 19 Javascript
JS使用Date对象实时显示当前系统时间简单示例
Aug 23 Javascript
vue路由事件beforeRouteLeave及组件内定时器的清除方法
Sep 29 Javascript
微信小程序map组件结合高德地图API实现wx.chooseLocation功能示例
Jan 23 Javascript
VSCode Vue开发推荐插件和VSCode快捷键(小结)
Aug 08 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单例模式实现(对象只被创建一次)
2012/12/05 PHP
浅析51个PHP处理字符串的函数
2013/08/02 PHP
php读取excel文件的简单实例
2013/08/26 PHP
Fedora下安装php Redis扩展笔记
2014/09/03 PHP
php数组去除空值函数分享
2015/02/02 PHP
php实现将任意进制数转换成10进制的方法
2015/04/17 PHP
PHP二维关联数组的遍历方式(实例讲解)
2017/10/18 PHP
表单(FORM)的一些实用效果代码
2007/03/25 Javascript
javascript与jquery中跳出循环的区别总结
2013/11/04 Javascript
JQuery设置获取下拉菜单某个选项的值(比较全)
2014/08/05 Javascript
DOM 高级编程
2015/05/06 Javascript
javascript背景时钟实现方法
2015/06/18 Javascript
Angular Js文件上传之form-data
2015/08/28 Javascript
prototype.js常用函数详解
2016/06/18 Javascript
Angular 路由route实例代码
2016/07/12 Javascript
angular双向绑定模拟探索
2016/12/26 Javascript
js省市区级联查询(插件版&amp;无插件版)
2017/03/21 Javascript
解决bootstrap中下拉菜单点击后不关闭的问题
2018/08/10 Javascript
python操作MySQL数据库的方法分享
2012/05/29 Python
Python程序中使用SQLAlchemy时出现乱码的解决方案
2015/04/24 Python
Linux下多个Python版本安装教程
2018/08/15 Python
Python3.5 Pandas模块缺失值处理和层次索引实例详解
2019/04/23 Python
Python 保存加载mat格式文件的示例代码
2020/08/04 Python
CSS实现鼠标滑过鼠标点击代码写法
2016/12/26 HTML / CSS
HTML5 语义化结构化规范化
2008/10/17 HTML / CSS
HTML5 3D衣服摇摆动画特效
2016/03/17 HTML / CSS
请解释在new与override的区别
2012/10/29 面试题
销售竞赛活动方案
2014/08/23 职场文书
竞聘演讲稿怎么写
2014/08/28 职场文书
中秋节国旗下演讲稿
2014/09/05 职场文书
党的群众路线对照检查材料
2014/09/22 职场文书
党的群众路线教育实践活动整改落实情况自查报告
2014/10/28 职场文书
网络营销计划
2015/01/17 职场文书
学雷锋主题班会教案
2015/08/13 职场文书
详细总结Python常见的安全问题
2021/05/21 Python
Python基于百度API识别并提取图片中文字
2021/06/27 Python