有关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 相关文章推荐
模拟用户操作Input元素,不会触发相应事件
May 11 Javascript
jquery中ajax学习笔记4
Oct 16 Javascript
javascript模拟map输出与去除重复项的方法
Feb 09 Javascript
每天一篇javascript学习小结(基础知识)
Nov 10 Javascript
基于JavaScript实现动态创建表格和增加表格行数
Dec 20 Javascript
原生js和jQuery实现淡入淡出轮播效果
Dec 25 Javascript
jQuery的ready方法实现原理分析
Oct 26 Javascript
JavaScript函数节流和函数防抖之间的区别
Feb 15 Javascript
微信小程序视图template模板引用的实例详解
Sep 20 Javascript
详解微信小程序canvas圆角矩形的绘制的方法
Aug 22 Javascript
详解VSCode配置启动Vue项目
May 14 Javascript
关于JS解构的5种有趣用法
Sep 05 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+mongodb判断坐标是否在指定多边形区域内的实例
2016/10/28 PHP
PHP实现的统计数据功能详解
2016/12/06 PHP
利用php生成验证码
2017/02/23 PHP
PHP使用CURL实现下载文件功能示例
2019/06/03 PHP
jquery里的each使用方法详解
2010/12/22 Javascript
jQuery UI Autocomplete 体验分享
2012/02/14 Javascript
JavaScript高级程序设计(第3版)学习笔记11 内建js对象
2012/10/11 Javascript
JavaScript版TAB选项卡效果实例
2013/08/16 Javascript
简单的ajax连接库分享(不用jquery的ajax)
2014/01/19 Javascript
jQuery 浮动导航菜单适合购物商品类型的网站
2014/09/09 Javascript
node.js中的buffer.length方法使用说明
2014/12/14 Javascript
ubuntu下安装nodejs以及升级的办法
2015/05/08 NodeJs
JavaScript中Number.MAX_VALUE属性的使用方法
2015/06/04 Javascript
利用jQuery实现WordPress中@的ID悬浮显示评论内容
2015/12/11 Javascript
JS中作用域和变量提升(hoisting)的深入理解
2016/10/31 Javascript
Ionic + Angular.js实现图片轮播的方法示例
2017/05/21 Javascript
Bootstrap多级菜单的实现代码
2017/05/23 Javascript
javascript 面向对象实战思想分享
2017/09/07 Javascript
webpack打包node.js后端项目的方法
2018/03/10 Javascript
js取0-9随机取4个数不重复的数字代码实例
2019/03/27 Javascript
在Vue项目中使用snapshot测试的具体使用
2019/04/16 Javascript
微信公众号生成新浪短网址的实现(快速生成)
2019/08/18 Javascript
JS工厂模式开发实践案例分析
2019/10/17 Javascript
js实现3D照片墙效果
2019/10/28 Javascript
[03:01]2014DOTA2国际邀请赛 小组赛7月13日TOPPLAY
2014/07/14 DOTA
pycharm 实现显示project 选项卡的方法
2019/01/17 Python
Python如何获得百度统计API的数据并发送邮件示例代码
2019/01/27 Python
pandas 强制类型转换 df.astype实例
2020/04/09 Python
what is the difference between ext2 and ext3
2015/08/25 面试题
自考生自我鉴定范文
2013/10/01 职场文书
服务生自我鉴定
2014/01/22 职场文书
个人批评与自我批评范文
2014/10/17 职场文书
银行员工考核评语
2014/12/31 职场文书
运动会运动员赞词
2015/07/22 职场文书
你会写报告?产品体验报告到底该怎么写?
2019/08/14 职场文书
苹果M1芯片安装nginx 并且部署vue项目步骤详解
2021/11/20 Servers