有关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 相关文章推荐
window.open被浏览器拦截后的自定义提示效果代码
Nov 19 Javascript
JS控制日期显示的小例子
Nov 23 Javascript
javascript中$(function() {});写与不写有哪些区别
Aug 10 Javascript
javascript从作用域链谈闭包
Jul 29 Javascript
jQuery隐藏和显示效果实现
Apr 06 Javascript
jQuery中each()、find()和filter()等节点操作方法详解(推荐)
May 25 Javascript
JavaScript知识点总结(十)之this关键字
May 31 Javascript
node+express制作爬虫教程
Nov 11 Javascript
详解使用vue实现tab 切换操作
Jul 03 Javascript
JS/jQuery实现获取时间的方法及常用类完整示例
Mar 07 jQuery
javascript头像上传代码实例
Sep 28 Javascript
使用react+redux实现计数器功能及遇到问题
Jun 02 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中判断数组是一维,二维,还是多维的解决方法
2013/05/04 PHP
PHP面向对象程序设计之接口用法
2014/08/20 PHP
Yii把CGridView文本框换成下拉框的方法
2014/12/03 PHP
php图片水印添加、压缩、剪切的封装类实现
2020/04/18 PHP
Ext javascript建立超链接,进行事件处理的实现方法
2009/03/22 Javascript
JS实现在Repeater控件中创建可隐藏区域的代码
2010/09/16 Javascript
Javascript 面向对象(一)(共有方法,私有方法,特权方法)
2012/05/23 Javascript
Jquery自定义button按钮的几种方法
2014/06/11 Javascript
NodeJS学习笔记之Http模块
2015/01/13 NodeJs
微信小程序 request接口的封装实例代码
2017/04/26 Javascript
JS获取填报扩展单元格控件的值的解决办法
2017/07/14 Javascript
node使用promise替代回调函数
2018/05/07 Javascript
傻瓜式vuex语法糖kiss-vuex整理
2018/12/21 Javascript
详解Vue中的scoped及穿透方法
2019/04/18 Javascript
分享一个vue项目“脚手架”项目的实现步骤
2019/05/26 Javascript
在js文件中引入(调用)另一个js文件的三种方法
2020/09/11 Javascript
Python使用scrapy采集数据时为每个请求随机分配user-agent的方法
2015/04/08 Python
Python迭代器与生成器基本用法分析
2018/07/26 Python
Python同步遍历多个列表的示例
2019/02/19 Python
Python实现钉钉发送报警消息的方法
2019/02/20 Python
python:按行读入,排序然后输出的方法
2019/07/20 Python
解决pycharm 安装numpy失败的问题
2019/12/05 Python
Python 3.8 新功能来一波(大部分人都不知道)
2020/03/11 Python
Lombok插件安装(IDEA)及配置jar包使用详解
2020/11/04 Python
python工具快速为音视频自动生成字幕(使用说明)
2021/01/27 Python
纯CSS实现设置半个字符的样式
2014/07/03 HTML / CSS
Madewell美德威尔美国官网:美国休闲服饰品牌
2016/11/25 全球购物
生产经理的自我评价分享
2013/11/07 职场文书
办公室文员工作自我评价
2013/12/01 职场文书
应届大专生求职信
2014/06/26 职场文书
教师查摆问题及整改措施
2014/10/11 职场文书
2014年全国法制宣传日宣传活动方案
2014/11/02 职场文书
师德师风心得体会(2016精选篇)
2016/01/12 职场文书
2016年学校招生广告语
2016/01/28 职场文书
关于JavaScript回调函数的深入理解
2021/06/27 Javascript
图片批量处理 - 尺寸、格式、水印等
2022/03/07 杂记