有关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维吉尼亚密码算法实现代码
Nov 09 Javascript
这些年、我收集的JQuery代码小结
Aug 01 Javascript
可自己添加html的伪弹出框实现代码
Sep 08 Javascript
JavaSript中变量的作用域闭包的深入理解
May 12 Javascript
jQuery动态创建html元素的常用方法汇总
Sep 05 Javascript
node.js中的fs.lstat方法使用说明
Dec 16 Javascript
JQuery调用绑定click事件的3种写法
Mar 28 Javascript
基于jQuery.Hz2Py.js插件实现的汉字转拼音特效
May 07 Javascript
jQuery实现图片预加载效果
Nov 27 Javascript
原生JS实现匀速图片轮播动画
Oct 18 Javascript
浅谈JS中this在各个场景下的指向
Aug 14 Javascript
使用 Opentype.js 生成字体子集的实例代码详解
May 25 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
缅甸的咖啡简史
2021/03/04 咖啡文化
php在服务器执行exec命令失败的解决方法
2012/03/03 PHP
PHP中$this和$that指针使用实例
2015/01/06 PHP
php之static静态属性与静态方法实例分析
2015/07/30 PHP
php parse_str() 函数的定义和用法
2016/05/23 PHP
PHP简单预防sql注入的方法
2016/09/27 PHP
PHP+mysql实现从数据库获取下拉树功能示例
2017/01/06 PHP
浅谈ThinkPHP中initialize和construct的区别
2017/04/01 PHP
JavaScript中this关键字使用方法详解
2007/03/08 Javascript
html数组字符串拼接的最快方法
2009/09/16 Javascript
$.each遍历对象、数组的属性值并进行处理
2014/07/18 Javascript
jQuery获取浏览器类型和版本号的方法
2016/07/05 Javascript
总结Javascript中的隐式类型转换
2016/08/24 Javascript
深入学习jQuery中的data()
2016/12/22 Javascript
一篇文章搞定JavaScript类型转换(面试常见)
2017/01/21 Javascript
解决canvas画布使用fillRect()时高度出现双倍效果的问题
2017/08/03 Javascript
Vue2.0设置全局样式(less/sass和css)
2017/11/18 Javascript
详解mpvue开发小程序小总结
2018/07/25 Javascript
vue添加axios,并且指定baseurl的方法
2018/09/19 Javascript
javascript实现拖拽碰撞检测
2020/03/12 Javascript
[49:17]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第三场 1月26日
2021/03/11 DOTA
Linux下使用python调用top命令获得CPU利用率
2015/03/10 Python
Python基于回溯法子集树模板解决马踏棋盘问题示例
2017/09/11 Python
python 批量修改/替换数据的实例
2018/07/25 Python
使用python去除图片白色像素的实例
2019/12/12 Python
CSS3的常见transformation图形变化用法小结
2016/05/13 HTML / CSS
美国最大的团购网站:Groupon
2016/07/23 全球购物
英国家电购物网站:Sonic Direct
2019/03/26 全球购物
车间主任岗位职责
2014/03/16 职场文书
汉语专业毕业生自荐信
2014/07/06 职场文书
党员学习党的群众路线思想汇报(5篇)
2014/09/10 职场文书
咖啡厅商业计划书
2014/09/15 职场文书
部队2014年终工作总结
2014/11/27 职场文书
2016春季运动会通讯稿
2015/07/18 职场文书
Python基础之常用库常用方法整理
2021/04/30 Python
Spring Boot 启动、停止、重启、状态脚本
2021/06/26 Java/Android