码迷,mamicode.com
首页 > Web开发 > 详细

js函数的执行环境

时间:2015-08-26 17:46:10      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:

     js的函数本质上是一种对象,是对象就会有自己的环境(作用域),看下面的例子

var var1 = {
               message: "var1",
               getMessage: function () {
                   alert(this.message);
               }
           };

var var2 = {
               message: "var2",
               getMessage:var1.getVar1
           };
var2.getMessage();

这段代码会输出 "var2"。不对啊,应该是输出"var1"啊,但是这里确实应该输出"var2",不信你自己实验。

      这就是函数体中的this在起作用,var2的函数getMessage指向的是var1的函数,而函数其实就是一段放在内存中的代码,执行var1.getMessage()时,this指向的就是var1,输出也就是“var1”了。执行var2.getMessage()时自然就输出"var2"了。如果改成是下面这样

var var1 = {
               message: "var1",
               getMessage: function () {
                   alert(this.message);
               }
           };

var var2 = {
               message: "var2",
               getMessage:function(){
                    var1.getMessage();
                }
           };
var2.getMessage();

输出就会是"var1"了。看出两段代码有什么区别了吗?区别就在第二段代码给var2重新指定了一个函数,只不过这个新函数中执行了var1的函数。

     this指向的就是函数的执行环境,在第一段代码中,其实就是把var1的函数的代码复制给了var2的函数,所以var2的函数在内存中编译后(浏览器解释js代码时就会把代码编译成机器码放在内存中)的代码是这样的:alert(this.message),this指向的是var2,所以会输出"var2"。第二段代码中,var2的函数没有自己的代码,它只是定义了一个指针指向了var1的函数代码,所以执行的其实就是var1的函数代码,this自然指向的就是var1的执行环境了。

js函数的执行环境

标签:

原文地址:http://www.cnblogs.com/carrothlb/p/4760698.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!