有关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 相关文章推荐
用unescape反编码得出汉字示例
Apr 24 Javascript
JavaScript的RequireJS库入门指南
Jul 01 Javascript
JavaScript实现的圆形浮动标签云效果实例
Aug 06 Javascript
js+canvas简单绘制圆圈的方法
Jan 28 Javascript
简单实现的JQuery文本框水印插件
Jun 14 Javascript
Centos7 中安装 Node.js v4.4.4
Nov 03 Javascript
Angular4编程之表单响应功能示例
Dec 13 Javascript
Vue单页面应用保证F5强刷不清空数据的解决方案
Jan 31 Javascript
详解webpack-dev-server的简单使用
Apr 02 Javascript
在vue中给列表中的奇数行添加class的实现方法
Sep 05 Javascript
Vue利用History记录上一页面的数据方法实例
Nov 02 Javascript
Vue 3.0中jsx语法的使用
Nov 13 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/03/08 PHP
PHP企业级应用之常见缓存技术篇
2011/01/27 PHP
php urlencode()与urldecode()函数字符编码原理详解
2011/12/06 PHP
WordPress中设置Post Type自定义文章类型的实例教程
2016/05/10 PHP
golang与PHP输出excel示例
2016/07/22 PHP
JavaScript 开发中规范性的一点感想
2009/06/23 Javascript
jQuery中add实现同时选择两个id对象
2010/10/22 Javascript
Javascript类库的顶层对象名用户体验分析
2010/10/24 Javascript
一个javascript图片阅览组件
2010/11/09 Javascript
使用jquery实现简单的ajax
2013/07/08 Javascript
Js类的静态方法与实例方法区分及jQuery拓展的两种方法
2016/06/03 Javascript
js创建数组的简单方法
2016/07/27 Javascript
KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定
2016/10/10 Javascript
javascript实现数据双向绑定的三种方式小结
2017/03/09 Javascript
深入理解NodeJS 多进程和集群
2018/10/17 NodeJs
JS实现倒计时图文效果
2018/11/17 Javascript
[54:28]EG vs OG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
[33:09]完美世界DOTA2联赛循环赛 Forest vs DM BO2第二场 10.29
2020/10/29 DOTA
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
2016/06/18 Python
Python抓取框架 Scrapy的架构
2016/08/12 Python
Python实现抢购IPhone手机
2018/02/07 Python
Pandas删除数据的几种情况(小结)
2019/06/21 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
2019/08/27 Python
Tensorflow分批量读取数据教程
2020/02/07 Python
英国折扣零售连锁店:QD Stores
2018/12/08 全球购物
Pretty Green美国:英式摇滚服饰风格代表品牌之一
2019/01/23 全球购物
党员年终民主评议的自我评价
2013/11/05 职场文书
小学生开学感言
2014/02/28 职场文书
教研活动总结
2014/04/28 职场文书
2014年监理个人工作总结
2014/12/11 职场文书
检讨书范文300字
2015/01/28 职场文书
消费者理赔投诉书
2015/07/02 职场文书
加薪申请书应该这样写!
2019/07/04 职场文书
AJAX学习笔记
2021/05/18 Javascript
浅析CSS在DevTools 中架构演变
2021/10/05 HTML / CSS
微信小程序结合ThinkPHP5授权登陆后获取手机号
2021/11/23 PHP