有关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 相关文章推荐
在b/s开发中经常用到的javaScript技术
Aug 23 Javascript
网页设计常用的一些技巧
Dec 22 Javascript
自制基于jQuery的智能提示插件一枚
Feb 18 Javascript
javascript是怎么继承的介绍
Jan 05 Javascript
js DOM 元素ID就是全局变量
Sep 20 Javascript
jQuery焦点控制图层展示延迟隐藏的方法
Mar 09 Javascript
javascript实现秒表计时器的制作方法
Feb 16 Javascript
AngularJS Toaster使用详解
Feb 24 Javascript
jQuery使用DataTable实现删除数据后重新加载功能
Feb 27 Javascript
深入浅析AngularJs模版与v-bind
Jul 06 Javascript
JavaScript设计模式之工厂模式和抽象工厂模式定义与用法分析
Jul 26 Javascript
原生JS实现无缝轮播图片
Jun 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
javascript中字符串拼接需注意的问题
2010/07/13 Javascript
jQuery EasyUI API 中文文档 - Menu菜单
2011/10/03 Javascript
jQuery基础框架浅入剖析
2012/12/27 Javascript
JavaScript使表单中的内容显示在屏幕上的方法
2015/06/29 Javascript
原生JS实现仿淘宝网左侧商品分类菜单效果代码
2015/09/10 Javascript
基于Echarts 3.19 制作常用的图形(非静态)
2016/05/19 Javascript
逻辑表达式中与或非的用法详解
2016/06/06 Javascript
jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页)
2017/05/19 jQuery
vue如何集成raphael.js中国地图的方法示例
2017/08/15 Javascript
js中this对象用法分析
2018/01/05 Javascript
使用vue实现grid-layout功能实例代码
2018/01/05 Javascript
Vue 框架之键盘事件、健值修饰符、双向数据绑定
2018/11/14 Javascript
vue中选项卡点击切换且能滑动切换功能的实现代码
2018/11/25 Javascript
Node.js如何优雅的封装一个实用函数的npm包的方法
2019/04/29 Javascript
小程序使用watch监听数据变化的方法详解
2019/09/20 Javascript
微信小程序实现锚点功能
2019/11/20 Javascript
如何在postman中添加cookie信息步骤解析
2020/06/30 Javascript
Python线程的两种编程方式
2015/04/14 Python
Python导入oracle数据的方法
2015/07/10 Python
Python判断值是否在list或set中的性能对比分析
2016/04/16 Python
Python实现的读取电脑硬件信息功能示例
2018/05/30 Python
python同时遍历数组的索引和值的实例
2018/11/15 Python
对Python+opencv将图片生成视频的实例详解
2019/01/08 Python
Python学习笔记之列表和成员运算符及列表相关方法详解
2019/08/22 Python
PyTorch笔记之scatter()函数的使用
2020/02/12 Python
解决Python在导入文件时的FileNotFoundError问题
2020/04/10 Python
Python发起请求提示UnicodeEncodeError错误代码解决方法
2020/04/21 Python
win10安装python3.6的常见问题
2020/07/01 Python
详解pytorch tensor和ndarray转换相关总结
2020/09/03 Python
CSS3 画基本图形,圆形、椭圆形、三角形等
2016/09/20 HTML / CSS
办公室秘书岗位职责范本
2014/02/11 职场文书
文化与传播毕业生求职信
2014/03/09 职场文书
2014社会治安综合治理工作总结
2014/12/04 职场文书
幼儿教师2014年度工作总结
2014/12/16 职场文书
人事主管岗位职责
2015/02/04 职场文书
驻村工作简报
2015/07/20 职场文书