有关js的变量作用域和this指针的讨论


Posted in Javascript onDecember 16, 2010

一、变量作用域:[P71]

这一句话说的非常精辟:“在ECMAScript中,只有两种执行环境,全局环境和函数环境,每个函数都是一个执行环境,包括嵌套函数。换句话说,其他情况下即使变量声明在一对大括号中,在括号外部仍然可以访问这些变量”。以下给出例子:

for(var i=0; i<5; i++) { 
var num = 20; // 在for语句中声明的变量 
} 
alert(num); // 在for语句外部调用变量,仍然可以得到num的值

对异常语句也同样可以:
try { 
var num = 20; // 在try语句中声明的变量 
a = b; // 引起一个异常 
} catch(e) { 
alert(num); // 在catch语句中调用变量,将得到20 
} finally { 
alert(num); // 在finally语句中调用变量,将得到20 
} 
alert(num); // 在try语句外部调用变量,将得到20

除了上面所演示的这两种语句外,一对大括号也无法构成一个执行环境,例如:
{ var num = 1;3 }

二、this指针:[P83] 在这里列出this在ECMAScript中的不同含义:

(1) 在全局执行环境中使用this,表示Global对象,在浏览器中就是window对象。

(2) 当在函数执行环境中使用this时,情况就有些复杂了。如果函数没有明显的作为非window对象的属性,而只是定义了函数,不管这个函数是不是定义在另一个函数中,这个函数中的this仍然表示window对象。如果函数显示地作为一个非window对象的属性,那么函数中的this就代表这个对象。(当然可以使用apply或者call函数来取代默认this的引用,详见[P88])

(3) 当通过new运算符来调用函数时,函数被当做一个构造函数,this指向构造函数创建出来的对象。
参考:
《JavaScript基础与案例开发详解》清华大学出版社

Javascript 相关文章推荐
Javascript的一种模块模式
Sep 08 Javascript
基于jQuery的让非HTML5浏览器支持placeholder属性的代码
May 24 Javascript
将HTMLCollection/NodeList/伪数组转换成数组的实现方法
Jun 20 Javascript
一个封装js代码-----展开收起效果示例
Jul 03 Javascript
javascript操作excel生成报表全攻略
May 04 Javascript
深入理解JavaScript系列(22):S.O.L.I.D五大原则之依赖倒置原则DIP详解
Mar 05 Javascript
JavaScript中子对象访问父对象的方式详解
Sep 01 Javascript
JQ选择器_选择同类元素的第N个子元素的实现方法
Sep 08 Javascript
AngularJS实现DOM元素的显示与隐藏功能
Nov 22 Javascript
基于angular实现模拟微信小程序swiper组件
Jun 11 Javascript
Vue中的情侣属性$dispatch和$broadcast详解
Mar 07 Javascript
详解vue项目中使用token的身份验证的简单实践
Mar 08 Javascript
关于JavaScript中var声明变量作用域的推断
Dec 16 #Javascript
jquery中动态效果小结
Dec 16 #Javascript
关于jquery append() html时的小问题的解决方法
Dec 16 #Javascript
Javascript学习笔记二 之 变量
Dec 15 #Javascript
Javascript学习笔记一 之 数据类型
Dec 15 #Javascript
iframe 父窗口和子窗口相互的调用方法集锦
Dec 15 #Javascript
jQuery Ajax使用 全解析
Dec 15 #Javascript
You might like
PHP文件上传实例详解!!!
2007/01/02 PHP
分页详解 从此分页无忧(PHP+mysql)
2007/11/23 PHP
php创建sprite
2014/02/11 PHP
JS上传前预览图片实例
2013/03/25 Javascript
js模仿windows桌面图标排列算法具体实现(附图)
2013/06/16 Javascript
jQuery$命名冲突怎么办如何解决
2014/01/16 Javascript
JavaScript中遍历对象的property的3种方法介绍
2014/12/30 Javascript
jquery中ready()函数执行的时机和window的load事件比较
2015/06/22 Javascript
JS动态创建元素的两种方法
2016/04/20 Javascript
基于Bootstrap使用jQuery实现输入框组input-group的添加与删除
2016/05/03 Javascript
Javascript 引擎工作机制详解
2016/11/30 Javascript
使用Fullpage插件快速开发整屏翻页的页面
2017/09/13 Javascript
Vue导出json数据到Excel电子表格的示例
2017/12/04 Javascript
浅谈AngularJs 双向绑定原理(数据绑定机制)
2017/12/07 Javascript
Vue商品控件与购物车联动效果的实例代码
2019/07/21 Javascript
微信小程序仿今日头条导航栏滚动解析
2019/08/20 Javascript
JavaScript 中的无穷数(Infinity)详解
2020/02/13 Javascript
跟老齐学Python之字典,你还记得吗?
2014/09/20 Python
在Python中处理XML的教程
2015/04/29 Python
Python lxml模块安装教程
2015/06/02 Python
Python使用微信SDK实现的微信支付功能示例
2017/06/30 Python
Python中使用支持向量机(SVM)算法
2017/12/26 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
2018/06/01 Python
Python键盘输入转换为列表的实例
2018/06/23 Python
对python添加模块路径的三种方法总结
2018/10/16 Python
详解Numpy中的数组拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)
2019/05/27 Python
python使用sklearn实现决策树的方法示例
2019/09/12 Python
python如何使用Redis构建分布式锁
2020/01/16 Python
美国购买舞会礼服网站:Couture Candy
2019/12/29 全球购物
2013年高中生自我评价
2013/10/23 职场文书
旷课检讨书1000字
2014/02/14 职场文书
部队万能检讨书
2014/02/20 职场文书
党员活动日总结
2014/05/05 职场文书
店铺转让协议书
2015/01/29 职场文书
涨工资申请书应该怎么写?
2019/07/08 职场文书
Python pyecharts绘制条形图详解
2022/04/02 Python