有关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 相关文章推荐
关于IE7 IE8弹出窗口顶上
Dec 22 Javascript
javascript各浏览器中option元素的表现差异
Apr 07 Javascript
Javascript中的方法和匿名方法实例详解
Jun 13 Javascript
JavaScript实现简单获取当前网页网址的方法
Nov 09 Javascript
AngularJS在IE8的不支持的解决方法
May 13 Javascript
基于JavaScript实现Tab选项卡切换效果
Nov 24 Javascript
Bootstrap fileinput文件上传组件使用详解
Jun 06 Javascript
jquery动态添加带有样式的HTML标签元素方法
Feb 24 jQuery
使用RxJS更优雅地进行定时请求详析
Jun 02 Javascript
Promise扫盲贴
Jun 24 Javascript
JS XMLHttpRequest原理与使用方法深入详解
Apr 30 Javascript
openlayers 3实现车辆轨迹回放
Sep 24 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数据库操作面向对象的优点
2006/10/09 PHP
对Session和Cookie的区分与解释
2007/03/16 PHP
set_exception_handler函数在ThinkPHP中的用法
2014/10/31 PHP
PHP执行shell脚本运行程序不产生core文件的方法
2016/12/28 PHP
Laravel框架使用Redis的方法详解
2018/05/30 PHP
(JS实现)MapBar中坐标的加密和解密的脚本
2007/05/16 Javascript
jQuery实现表单input中提示文字value随鼠标焦点移进移出而显示或隐藏的代码
2010/03/21 Javascript
JQuery扩展插件Validate 3通过参数设置错误信息
2011/09/05 Javascript
JQuery实现鼠标滑过显示导航下拉列表
2013/09/12 Javascript
js实现二级菜单渐隐显示
2015/11/03 Javascript
javascript新闻跑马灯实例代码
2020/07/29 Javascript
jQuery中选择器的基础使用教程
2016/05/23 Javascript
100多个基础常用JS函数和语法集合大全
2017/02/16 Javascript
微信小程序 使用腾讯地图SDK详解及实现步骤
2017/02/28 Javascript
vue.js开发实现全局调用的MessageBox组件实例代码
2017/11/22 Javascript
解决Vue axios post请求,后台获取不到数据的问题方法
2018/08/11 Javascript
微信小程序和百度的语音识别接口详解
2019/05/06 Javascript
[54:58]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第一场 11.25
2020/11/25 DOTA
Python的Django框架中的数据库配置指南
2015/07/17 Python
Python中使用haystack实现django全文检索搜索引擎功能
2017/08/26 Python
python3利用Dlib19.7实现人脸68个特征点标定
2018/02/26 Python
python 处理telnet返回的More,以及get想要的那个参数方法
2019/02/14 Python
Python操作SQLite/MySQL/LMDB数据库的方法
2019/11/07 Python
PyCharm 2020.2下配置Anaconda环境的方法步骤
2020/09/23 Python
俄罗斯名牌服装网上商店:UNIQUE FABRIC
2019/07/25 全球购物
经典c++面试题三
2015/07/08 面试题
J2EE面试题大全
2016/08/06 面试题
国际会议邀请函范文
2014/01/16 职场文书
如何打造一封优秀的留学推荐信
2014/01/25 职场文书
高中教师考核方案
2014/05/18 职场文书
2014年幼师工作总结
2014/11/22 职场文书
2015年防汛工作总结
2015/05/15 职场文书
公司行政管理制度范本
2015/08/05 职场文书
职工的安全责任书范文!
2019/07/02 职场文书
利用JuiceFS使MySQL 备份验证性能提升 10 倍
2022/03/17 MySQL
详解Go语言中配置文件使用与日志配置
2022/06/01 Golang