有关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的给文章加入关键字链接
Oct 26 Javascript
JavaScript中的作用域链和闭包
Jun 30 Javascript
用js提交表单解决一个页面有多个提交按钮的问题
Sep 01 Javascript
javascript使用switch case实现动态改变超级链接文字及地址
Dec 16 Javascript
js实现点击按钮后给Div图层设置随机背景颜色的方法
May 06 Javascript
jQuery Ajax页面局部加载方法汇总
Jun 02 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
Oct 08 Javascript
JavaScript获取短信验证码(周期性)
Dec 29 Javascript
vue.js的手脚架vue-cli项目搭建的步骤
Aug 30 Javascript
微信小程序中上传图片并进行压缩的实现代码
Aug 28 Javascript
详解微信小程序自定义组件的实现及数据交互
Jul 22 Javascript
JS实现进度条动态加载特效
Mar 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
php 面向对象的一个例子
2011/04/12 PHP
php的SimpleXML方法读写XML接口文件实例解析
2014/06/16 PHP
php获取网页请求状态程序示例
2014/06/17 PHP
Yii2学习笔记之汉化yii设置表单的描述(属性标签attributeLabels)
2017/02/07 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
laravel高级的Join语法详解以及使用Join多个条件
2019/10/16 PHP
详解new function(){}和function(){}() 区别分析
2008/03/22 Javascript
jquery imgareaselect 使用利用js与程序结合实现图片剪切
2009/07/30 Javascript
Wordpress ThickBox 点击图片显示下一张图的修改方法
2010/12/11 Javascript
JavaScript中的eval()函数详解
2013/08/22 Javascript
常用的jQuery前端技巧收集
2014/12/24 Javascript
JavaScript类型系统之基本数据类型与包装类型
2016/01/06 Javascript
基于Bootstrap实现下拉菜单项和表单导航条(两个菜单项,一个下拉菜单和登录表单导航条)
2016/07/22 Javascript
jQuery点击弹出层弹出模态框点击模态框消失代码分享
2017/01/21 Javascript
Express与NodeJs创建服务器的两种方法
2017/02/06 NodeJs
Vue 短信验证码组件开发详解
2017/02/14 Javascript
vue的基本用法与常见指令
2017/08/15 Javascript
详解使用angular的HttpClient搭配rxjs
2017/09/01 Javascript
关于微信小程序登录的那些事
2019/01/08 Javascript
Python线程的两种编程方式
2015/04/14 Python
详解在Python和IPython中使用Docker
2015/04/28 Python
遍历python字典几种方法总结(推荐)
2016/09/11 Python
pandas带有重复索引操作方法
2018/06/08 Python
基于Python实现扑克牌面试题
2019/12/11 Python
解决django的template中如果无法引用MEDIA_URL问题
2020/04/07 Python
利用python实现后端写网页(flask框架)
2021/02/28 Python
CSS3系列教程:背景图片(背景大小和多背景图) 应用说明
2012/12/19 HTML / CSS
荷兰鞋子在线:Nelson Schoenen
2017/12/25 全球购物
汇集了世界上最好的天然和有机美容产品:LoveLula
2018/02/05 全球购物
国际政治个人自荐信范文
2013/11/26 职场文书
劳动模范事迹材料
2014/01/19 职场文书
119消防日活动总结
2014/08/29 职场文书
个人三严三实对照检查材料思想汇报
2014/09/22 职场文书
工程部文员岗位职责
2015/02/04 职场文书
建筑工程材料员岗位职责
2015/04/11 职场文书
2016年春季运动会通讯稿
2015/11/25 职场文书