有关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浮点数运算出现Bug的方法
Mar 12 Javascript
jquery $(this).attr $(this).val方法使用介绍
Oct 08 Javascript
Knockout visible绑定使用方法
Nov 15 Javascript
jQuery 计算iframe 窗口大小的方法
May 13 Javascript
js 判断图片是否加载完以及实现图片的预下载
Aug 14 Javascript
推荐一款jQuery插件模板
Jan 09 Javascript
js判断某个方法是否存在实例代码
Jan 10 Javascript
js仿土豆网带缩略图的焦点图片切换效果实现方法
Feb 23 Javascript
预防网页挂马的方法总结
Nov 03 Javascript
jQuery 开发之EasyUI 添加数据的实例
Sep 26 jQuery
vue与TypeScript集成配置最简教程(推荐)
Oct 17 Javascript
js实现直播点击飘心效果
Aug 19 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连接Access数据库错误及解决方法
2013/06/20 PHP
改写函数实现PHP二维/三维数组转字符串
2013/09/13 PHP
php 表单提交大量数据发生丢失的解决方法
2014/03/03 PHP
PHP文件锁定写入实例解析
2014/07/14 PHP
PHP自带ZIP压缩、解压缩类ZipArchiv使用指南
2015/03/03 PHP
php判断对象是派生自哪个类的方法
2015/06/20 PHP
swoole和websocket简单聊天室开发
2017/11/18 PHP
Laravel框架基于ajax实现二级联动功能示例
2019/01/17 PHP
jquery入门—选择器实现隔行变色实例代码
2013/01/04 Javascript
fmt:formatDate的输出格式详解
2014/01/09 Javascript
JS截取url中问号后面参数的值信息
2014/04/29 Javascript
jquery插件tytabs.jquery.min.js实现渐变TAB选项卡效果
2015/08/25 Javascript
JS实现网页游戏中滑块响应鼠标点击移动效果
2015/10/19 Javascript
使用原生js写ajax实例(推荐)
2017/05/31 Javascript
JS获取当前地理位置的方法
2017/10/25 Javascript
Koa2 之文件上传下载的示例代码
2018/03/29 Javascript
angularjs请求数据的方法示例
2019/08/06 Javascript
vue实现分页加载效果
2019/12/24 Javascript
node.js使用 http-proxy 创建代理服务器操作示例
2020/02/10 Javascript
[15:39]教你分分钟做大人:龙骑士
2014/10/30 DOTA
[00:32]2018DOTA2亚洲邀请赛VGJ.T出场
2018/04/03 DOTA
Python中的面向对象编程详解(上)
2015/04/13 Python
python实现自动登录人人网并采集信息的方法
2015/06/28 Python
Python两个内置函数 locals 和globals(学习笔记)
2016/08/28 Python
基于Python3 逗号代码 和 字符图网格(详谈)
2017/06/22 Python
NLTK 3.2.4 环境搭建教程
2018/09/19 Python
对python操作kafka写入json数据的简单demo分享
2018/12/27 Python
PyTorch的深度学习入门之PyTorch安装和配置
2019/06/27 Python
python kafka 多线程消费者&amp;手动提交实例
2019/12/21 Python
Python如何通过Flask-Mail发送电子邮件
2020/01/29 Python
HTML5 CSS3给网站设计带来出色效果
2009/07/16 HTML / CSS
CSS3中31种选择器使用方法教程
2013/12/05 HTML / CSS
博士生入学考试推荐信
2013/11/17 职场文书
2014年安全生产大检查方案
2014/05/13 职场文书
如何在Python中创建二叉树
2021/03/30 Python
苹果的回收机器人可以通过拆解iPhone获取大量的金和铜并外公布了环境保护最新进展
2022/04/21 数码科技