有关js的变量作用域和this指针的讨论

 更新时间:2010年12月16日 22:30:24   作者:  
在ECMAScript中,只有两种执行环境,全局环境和函数环境,每个函数都是一个执行环境,包括嵌套函数。换句话说,其他情况下即使变量声明在一对大括号中,在括号外部仍然可以访问这些变量
一、变量作用域:[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基础与案例开发详解》清华大学出版社

相关文章

  • js自动闭合html标签(自动补全html标记)

    js自动闭合html标签(自动补全html标记)

    假如我有一个DIV,如果没有闭合后面的样式都会乱了,这样的代码可能会影响后面的样式,我希望用JS去自动闭合这种没有闭合的标签
    2012-10-10
  • BootStrap daterangepicker 双日历控件

    BootStrap daterangepicker 双日历控件

    这篇文章主要介绍了BootStrap daterangepicker 双日历控件,代码简单易懂,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-06-06
  • JavaScript 截取字符串代码实例

    JavaScript 截取字符串代码实例

    这篇文章主要介绍了JavaScript 截取字符串代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • bootstrap模态框垂直居中效果

    bootstrap模态框垂直居中效果

    这篇文章主要为大家详细介绍了bootstrap模态框垂直居中效果的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • 微信小程序静默登录的实现代码

    微信小程序静默登录的实现代码

    这篇文章主要介绍了微信小程序静默登录的实现代码,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • js实现模糊匹配功能

    js实现模糊匹配功能

    这篇文章主要为大家详细介绍了js实现模糊匹配功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • JavaScript引用类型Array实例分析

    JavaScript引用类型Array实例分析

    这篇文章主要介绍了JavaScript引用类型Array,结合实例形式较为详细的分析了JavaScript数组相关的创建、检测、转换、排序、栈、队列、引用等各种常见操作技巧,需要的朋友可以参考下
    2018-07-07
  • 微信小程序云开发实现数据添加、查询和分页

    微信小程序云开发实现数据添加、查询和分页

    这篇文章主要为大家详细介绍了微信小程序云开发实现数据添加、查询和分页,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • JavaScript弹出窗口方法汇总

    JavaScript弹出窗口方法汇总

    这篇文章主要介绍了JavaScript弹出窗口方法,非常实用的功能,需要的朋友可以参考下
    2014-08-08
  • JS实现上下左右对称的九九乘法表

    JS实现上下左右对称的九九乘法表

    九九乘法表使用很多种语言都可以实现,本文给大家介绍js使用for、while循环来完成四种对称的九九乘法表,对九九乘法表需要的朋友参考下
    2016-02-02

最新评论