有关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 相关文章推荐
获取焦点时,利用js定时器设定时间执行动作
Apr 02 Javascript
简单漂亮的js弹窗可自由拖拽且兼容大部分浏览器
Oct 22 Javascript
jQuery对val和atrr(&quot;value&quot;)赋值的区别介绍
Sep 26 Javascript
基于jQuery实现音乐播放试听列表
Apr 14 Javascript
jQuery ajax 当async为false时解决同步操作失败的问题
Nov 18 Javascript
微信小程序 template模板详解及实例
Feb 21 Javascript
jQuery plugin animsition使用小结
Sep 14 jQuery
VUE 3D轮播图封装实现方法
Jul 03 Javascript
Angular2 自定义表单验证器的实现方法
Dec 14 Javascript
vue 解除鼠标的监听事件的方法
Nov 13 Javascript
微信小程序开发摇一摇功能
Nov 22 Javascript
Vue实现渲染数据后控制滚动条位置(推荐)
Dec 09 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
用Zend Encode编写开发PHP程序
2006/10/09 PHP
yii实现使用CUploadedFile上传文件的方法
2015/12/28 PHP
laravel 使用auth编写登录的方法
2019/09/30 PHP
javascript hashtable实现代码
2009/10/13 Javascript
js 创建书签小工具之理论
2011/02/25 Javascript
Js中的onblur和onfocus事件应用介绍
2013/08/27 Javascript
在Node.js应用中读写Redis数据库的简单方法
2015/06/30 Javascript
Angular发布1.5正式版,专注于向Angular 2的过渡
2016/02/18 Javascript
Bootstrap实现下拉菜单效果
2016/04/29 Javascript
解读Bootstrap v4 sass设计
2016/05/29 Javascript
AngularJS实现动态编译添加到dom中的方法
2016/11/04 Javascript
深入理解AngularJS中的ng-bind-html指令
2017/03/27 Javascript
使用JS模拟锚点跳转的实例
2018/02/01 Javascript
深入理解Vue nextTick 机制
2018/04/28 Javascript
js中的闭包实例展示
2018/11/01 Javascript
手把手教你如何使用nodejs编写cli命令行
2018/11/05 NodeJs
详解在vue-test-utils中mock全局对象
2018/11/07 Javascript
layui 数据表格复选框实现单选功能的例子
2019/09/19 Javascript
小程序新版订阅消息模板消息
2019/12/31 Javascript
[01:51]2014DOTA2国际邀请赛 这个赛场没有失败者VGTi5再见
2014/07/23 DOTA
在Python程序中实现分布式进程的教程
2015/04/28 Python
在Python的Django框架中编写错误提示页面
2015/07/22 Python
Python有序查找算法之二分法实例分析
2017/12/11 Python
Python+matplotlib+numpy实现在不同平面的二维条形图
2018/01/02 Python
Python中摘要算法MD5,SHA1简介及应用实例代码
2018/01/09 Python
Python中__repr__和__str__区别详解
2019/11/07 Python
Python 转移文件至云对象存储的方法
2021/02/07 Python
使用CSS3的ruby-position固定注音位置的用法示例
2016/07/05 HTML / CSS
Urban Outfitters德国官网:美国跨国生活方式零售公司
2018/05/21 全球购物
英国票务网站:Ticketmaster英国
2018/08/27 全球购物
C语言50道问题
2014/10/23 面试题
英语专业毕业个人求职自荐信
2013/09/21 职场文书
工程索赔意向书
2014/08/30 职场文书
幼儿园校园小喇叭广播稿
2014/10/17 职场文书
2015年党员公开承诺书范文
2015/01/22 职场文书
投资合作意向书范本
2015/05/08 职场文书