有关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 相关文章推荐
小型js框架veryide.librar源代码
Mar 05 Javascript
javascript中的float运算精度实例分析
Aug 21 Javascript
uploadify 3.0 详细使用说明
Jun 18 Javascript
jquery判断浏览器类型的代码
Nov 05 Javascript
javascript中常用编程知识
Apr 08 Javascript
JavaScript将当前时间转换成UTC标准时间的方法
Apr 06 Javascript
详解JavaScript语言的基本语法要求
Nov 20 Javascript
AngualrJS中的Directive制作一个菜单
Jan 26 Javascript
JS常用函数和常用技巧小结
Oct 15 Javascript
Vue 第三方字体图标引入 Font Awesome的方法
Sep 28 Javascript
详解Vue依赖收集引发的问题
Apr 22 Javascript
微信小程序实现上拉加载功能
Nov 20 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递归列出所有文件和目录的代码
2008/09/10 PHP
yii框架中的Url生产问题小结
2012/01/16 PHP
PHP编码规范的深入探讨
2013/06/06 PHP
javascript 事件处理程序介绍
2012/06/27 Javascript
javascript 图片裁剪技巧解读
2012/11/15 Javascript
jquery html动态生成select标签出问题的解决方法
2013/11/20 Javascript
javascript编写贪吃蛇游戏
2015/07/07 Javascript
JS实现图片平面旋转的方法
2016/03/01 Javascript
轻量级jQuery插件slideBox实现带底栏轮播(焦点图)代码
2016/03/28 Javascript
javascript判断图片是否加载完成的方法推荐
2016/05/13 Javascript
BootStrap selectpicker
2016/06/20 Javascript
详解如何使用Vue2做服务端渲染
2017/03/29 Javascript
JS基于正则实现数字千分位用逗号分隔的方法
2017/06/16 Javascript
JavaScript中的return布尔值的用法和原理解析
2017/08/14 Javascript
代码分析vue中如何配置less
2018/09/28 Javascript
TypeScript 运行时类型检查补充工具
2020/09/28 Javascript
如何编写一个 Webpack Loader的实现
2020/10/18 Javascript
[06:37]2014DOTA2国际邀请赛 昔日王者渴望重回巅峰
2014/07/12 DOTA
Python struct.unpack
2008/09/06 Python
使用Python的PEAK来适配协议的教程
2015/04/14 Python
简单介绍Python中的try和finally和with方法
2015/05/05 Python
Python使用Turtle模块绘制五星红旗代码示例
2017/12/11 Python
Tensorflow加载预训练模型和保存模型的实例
2018/07/27 Python
Python基于OpenCV实现人脸检测并保存
2019/07/23 Python
python 定时器每天就执行一次的实现代码
2019/08/14 Python
Pycharm中配置远程Docker运行环境的教程图解
2020/06/11 Python
Python字符串格式化常用手段及注意事项
2020/06/17 Python
python 实现有道翻译功能
2021/02/26 Python
canvas探照灯效果的示例代码
2018/11/30 HTML / CSS
新西兰第一的行李箱网站:luggage.co.nz
2019/07/22 全球购物
3D空间设计学生找工作的自我评价
2013/10/28 职场文书
汽车专业毕业生自荐信
2013/11/03 职场文书
打架检讨书100字
2014/01/19 职场文书
2015关于重阳节的演讲稿
2015/03/20 职场文书
2015年市场部工作总结
2015/04/30 职场文书
2015年党员发展工作总结
2015/05/13 职场文书