有关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 相关文章推荐
jquery 中的each()跳出循环的语句
May 23 Javascript
jQuery插件实现带圆点的焦点图片轮播切换
Jan 18 Javascript
浅谈如何实现easyui的datebox格式化
Jun 12 Javascript
BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面
Aug 01 Javascript
BootStrap+Angularjs+NgDialog实现模式对话框
Aug 24 Javascript
vue-cli如何引入bootstrap工具的方法
Oct 19 Javascript
vue登录路由验证的实现
Dec 13 Javascript
微信小程序实现文字跑马灯
May 26 Javascript
vue 左滑删除功能的示例代码
Jan 28 Javascript
Angular单元测试之事件触发的实现
Jan 20 Javascript
three.js如何实现3D动态文字效果
Mar 03 Javascript
JavaScript圣杯布局与双飞翼布局实现案例详解
Aug 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
超外差式晶体管收音机的组装与统调
2021/03/01 无线电
php addslashes和mysql_real_escape_string
2010/01/24 PHP
一组PHP可逆加密解密算法实例代码
2014/01/21 PHP
php json转换成数组形式代码分享
2014/11/10 PHP
PHP socket 模拟POST 请求实例代码
2016/07/18 PHP
用js计算页面执行时间的函数
2006/12/07 Javascript
JavaScript 学习笔记 Black.Caffeine 09.11.28
2009/11/30 Javascript
javascript获取隐藏dom的宽高 具体实现
2013/07/14 Javascript
JavaScript中诡异的delete操作符
2015/03/12 Javascript
JavaScript更改原始对象valueOf的方法
2015/03/19 Javascript
JS实现设置ff与ie元素绝对位置的方法
2016/03/08 Javascript
checkbox批量选中,获取选中项的值的简单实例
2016/06/28 Javascript
学习Bootstrap滚动监听 附调用方法
2016/07/02 Javascript
JavaScript实现三级联动菜单效果
2017/08/16 Javascript
在原生不支持的旧环境中添加兼容的Object.keys实现方法
2017/09/11 Javascript
深入理解Vue router的部分高级用法
2018/08/15 Javascript
VUE 实现复制内容到剪贴板的两种方法
2019/04/24 Javascript
使用异步组件优化Vue应用程序的性能
2019/04/28 Javascript
js实现图片粘贴到网页
2019/12/06 Javascript
ant design pro中可控的筛选和排序实例
2020/11/17 Javascript
Python 的 Socket 编程
2015/03/24 Python
Python中使用partial改变方法默认参数实例
2015/04/28 Python
特征脸(Eigenface)理论基础之PCA主成分分析法
2018/03/13 Python
python 计算一个字符串中所有数字的和实例
2019/06/11 Python
python中Lambda表达式详解
2019/11/20 Python
Python 解析pymysql模块操作数据库的方法
2020/02/18 Python
Django models filter筛选条件详解
2020/03/16 Python
如何使用html5与css3完成google涂鸦动画
2012/12/16 HTML / CSS
精致的手工皮鞋:Shoe Embassy
2019/11/08 全球购物
公司培训欢迎词
2014/01/10 职场文书
旅游管理专业大学生职业规划书
2014/02/27 职场文书
开学季活动策划方案
2014/02/28 职场文书
建筑安全生产目标责任书
2014/07/23 职场文书
关于成绩下滑的自我检讨书
2014/09/20 职场文书
酒店销售经理岗位职责
2015/04/02 职场文书
JavaScript实现两个数组的交集
2022/03/25 Javascript