有关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 相关文章推荐
javascript生成/解析dom的CDATA类型的字段的代码
Apr 22 Javascript
asp.net刷新本页面的六种方法总结
Jan 07 Javascript
JavaScript使用focus()设置焦点失败的解决方法
Sep 03 Javascript
兼容Firefox的Javascript XSLT 处理XML文件
Dec 31 Javascript
js实现照片墙功能实例
Feb 05 Javascript
javascript实现获取服务器时间
May 19 Javascript
js+css实现的圆角边框TAB选项卡滑动门代码分享(2款)
Aug 26 Javascript
vue2.0中goods选购栏滚动算法的实现代码
May 17 Javascript
在 Vue 项目中引入 tinymce 富文本编辑器的完整代码
May 04 Javascript
echarts实现地图定时切换散点与多图表级联联动详解
Aug 07 Javascript
Layui tree 下拉菜单树的实例代码
Sep 21 Javascript
JS 创建对象的模式实例小结
Apr 28 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
Joomla语言翻译类Jtext用法分析
2016/05/05 PHP
超级兔子让浮动层消失的前因后果
2007/03/09 Javascript
JavaScript DOM学习第六章 表单实例
2010/02/19 Javascript
按钮JS复制文本框和表格的代码
2011/04/01 Javascript
ie下动态加态js文件的方法
2011/09/13 Javascript
跨域请求之jQuery的ajax jsonp的使用解惑
2011/10/09 Javascript
jQuery ui插件的使用方法代码实例
2013/05/08 Javascript
JS验证身份证有效性示例
2013/10/11 Javascript
javascript通过navigator.userAgent识别各种浏览器
2013/10/25 Javascript
让jQuery与其他JavaScript库并存避免冲突的方法
2013/12/23 Javascript
Bootstrap安装环境配置教程分享
2016/05/27 Javascript
JS中判断字符串中出现次数最多的字符及出现的次数的简单实例
2016/06/03 Javascript
jQuery EasyUI API 中文帮助文档和扩展实例
2016/08/01 Javascript
js实现全选和全不选
2020/07/28 Javascript
微信小程序实现倒计时功能
2020/11/19 Javascript
python备份文件以及mysql数据库的脚本代码
2013/06/10 Python
python实现排序算法
2014/02/14 Python
在Django的视图中使用数据库查询的方法
2015/07/16 Python
Python数据类型详解(一)字符串
2016/05/08 Python
浅谈Scrapy框架普通反爬虫机制的应对策略
2017/12/28 Python
Python+PIL实现支付宝AR红包
2018/02/09 Python
python pandas dataframe 行列选择,切片操作方法
2018/04/10 Python
Python通过属性手段实现只允许调用一次的示例讲解
2018/04/21 Python
关于Python-faker的函数效果一览
2019/11/28 Python
详解如何通过H5(浏览器/WebView/其他)唤起本地app
2017/12/11 HTML / CSS
Sam’s Club山姆会员商店:沃尔玛旗下高端会员制商店
2017/01/16 全球购物
金蝶的一道SQL笔试题
2012/12/18 面试题
医学院学生求职简历的自我评价
2013/10/24 职场文书
安全检查管理制度
2014/02/02 职场文书
天猫某品牌专卖店运营计划书
2014/03/21 职场文书
交通安全主题班会
2015/08/12 职场文书
老舍《猫》教学反思
2016/02/17 职场文书
重温经典:乔布斯在斯坦福大学的毕业演讲(双语)
2019/08/26 职场文书
基于Redis的List实现特价商品列表功能
2021/08/30 Redis
利用uni-app生成微信小程序的踩坑记录
2022/04/05 Javascript
不负正版帝国之名 《重返帝国》引领SLG手游制作新的标杆
2022/04/07 其他游戏