js函数的执行环境

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的执行环境了。

时间: 2024-10-12 16:18:19

js函数的执行环境的相关文章

js中的执行环境及作用域

最近在面试时被问到了对作用域链的理解,感觉当时回答的不是很好,今天就来说说js中的作用域链吧. 首先来说说js中的执行环境,所谓执行环境(有时也称环境)它是JavaScript中最为重要的一个概念.执行环境定义了变量或函数有权访问的其他数据 ,决定了它们各自的行为.而每个执行环境都有一个与之相关的变量对象,环境中定义的所有变量和函数都保存在这个对象中. 理解了执行环境,现在就看看什么是作用域链吧.每个函数都有自己的执行环境,当代码在执行环境中执行时,就会创建变量对象的作用域链.作用域链保证了对执

JS函数的上下文环境

var i=1; var fn1=function(){ console.log(i); } var fn2=function(){ var i=2; fn1(); } fn2();      // 1 fn1()函数的指向为window.函数的执行环境是在定义时确定的.

(转)在网页中JS函数自动执行常用三种方法

原文:http://blog.sina.com.cn/s/blog_6f6b4c3c0100nxx8.html 在网页中JS函数自动执行常用三种方法 在网页中JS函数自动执行常用三种方法 在HTML中的Head区域中,有如下函数: <SCRIPT   LANGUAGE="JavaScript">   functionn MyAutoRun() {   //以下是您的函数的代码,请自行修改先! alert("函数自动执行哦!");   } </SCR

在网页中JS函数自动执行常用三种方法

在网页中JS函数自动执行常用三种方法 在HTML中的Head区域中,有如下函数: <SCRIPT   LANGUAGE="JavaScript">   functionn MyAutoRun() {   //以下是您的函数的代码,请自行修改先! alert("函数自动执行哦!");   }  </SCRIPT> 下面,我们就针对上面的函数,让其在网页载入的时候自动运行! ①第一种方法 将如上代码改为: <SCRIPT   LANGUAG

Javascript 函数及其执行环境和作用域

函数在javascript中可以说是一等公民,也是最有意思的事情,javascript函数其实也是一个对象,是Function类型的实例.因此声明一个函数首先可以使用 Function构造函数: var saySomething = new Function("something","console.log(something)"); saySomething("hello world!"); // 输出hello world! Function

浅谈js中的执行环境和执行环境对象

什么是js的"执行环境",每当函数被调用的时候,就会产生一个新的执行环境,它是运行中的函数的意思,比方说运动员在奔跑的环境中,我们可以把运动员在奔跑的环境中,说成奔跑中的运动员,以此类推说成运行中的函数,行话叫”执行环境“. 下面我们就以一个例子进行分析执行环境对象,以下是执行环境对象的第一轮 以上的这个参数和函数都已被声明和赋值,并且局部变量已被声明,这个就是第一轮,接下来就是要执行第二轮 由于在执行环境中可以调用函数,其中会有很多的深度,其中又会设计到很多比较复杂的函数调用以及作用

学习js函数--自执行函数

我在写代码时候经常会在tpl的<script>里写类似的代码: $(function(){ alert("我好饿"); }); 刚开始的时候只知道写了它不需要调用,直接执行,就这样依葫芦画瓢,我写了很多代码.说道这,还要说说这货的加载顺序,如果把代码直接写到script标签里,当页面加载完这个script标签就会执行里边的代码了.如果在这代码里用到了未加载的dom或者调用了未加载的方法,是会报错的.言归正传,这个函数其实就是自执行函数,很多人会比较专业地称为"立即

JS笔记(执行环境,作用域)

1.执行环境对应一个变量对象,包括了这个环境所有的变量和函数. 2.执行环境也可以是函数,每个函数都有自己的执行环境,此时,函数的变量对象是活动对象,且最开始只有一个变量,即命名参数,arguments对象. 3.当代码运行,会创建变量对象的作用域链,作用域的最前端是当前执行环境的变量对象,当代码此时在当前的变量环境找不到标识符时,会再寻找下一个变量对象,直至找到,最后个变量对象为全局执行环境变量对象.

在JS函数中执行C#中的函数、字段

1.调用字段 cs文件的代码: public int id = 0; protected void Page_Load(object sender, EventArgs e) { id = 2; } js页面的代码: function CheckFunc() { alert("<%= id%>"); } 2.调用函数: 在JS函数中访问或执行C#.NET中的函数: 在JS函数中访问C#函数方法一: 首先建立一个按钮,在后台将调用或处理的内容写入button_click中;接