码迷,mamicode.com
首页 > 其他好文 > 详细

指尖的流连9月20.

时间:2015-09-20 23:58:55      阅读:569      评论:0      收藏:0      [点我收藏+]

标签:

##9.16上下文


    执行上下文环境:1.变量,变量的声明 ,默认undefined
                  2.this:赋值,全局指向window
                  3.函数的声明:function f1(){};
                    函数表达式:var arr = function (){};
    
    函数调用完成上下文出栈,并且函数里的变量被销毁,释放内存

    函数中的变量:函数每被调用一次都会产生一个新的上下文环境,,不同的调用会产生不同的参数

    函数中的变量:window , arguments ,undefined
    
    自由变量:不再同一个作用域的变量,定义在一个作用域,调用在另一个作用域
    当函数在于解析,已经确定了自由变量 

    全局变量可以用window访问 

    没有使用var创建代表全局变量:a = 1;
    === :代表全等

    //全局变量可以用window访问
    var a = 10;
    function arr(){
        var a = 20;
        console.log(window.a);
    }
    arr();

    //函数每一次调用,都会生成新的上下文,不同的调用会有不同的参数
    var a = 10;
    function arr(){
        console.log(a);//a是自由变量:在一个作用域生成,在另一个作用域调用
                        //当函数定义时,已经确定了自由变量
    }

    function arrl(){
        var a = 20;
        arr();
    }
     arrl();//输出10

    //先找到var和function,再找到arr()函数进入,找到var a; var a = 100;
    var a = 10;//全局变量
    function arr(){
        //局部变量
        a = 100;
        console.log(a);//100
        console.log(this.a);//10
        var a;
        console.log(a);//100
    }
    arr();
    //arr调用完成,销毁.找到全局变量
    console.log(a);//10

##作用域


    作用域里并没有变量,作用域里的变量和函数都存放在上下文里。
    作用域链:
        先在当前作用域找,如果有则获取并结束,如果没有则继续向上找
        如果当前作用域是全局作用域,如果没找到返回未定义。
        每个函数都会创建自身的作用域,函数定义时已经确定
    
    所有window对象的属性拥有全局作用域
    所有末定义直接赋值的变量自动声明为拥有全局作用域(没有使用var创建代表全局变量:a = 1;)
    
    
##this


    函数作为对象的一个属性,并且作为对象的一个属性被调用时,谁调用函数,函数中的this指向该对象
    
    this在调用时才能确定是谁在调用,哪个调用就指向哪个
    构造函数:this通过new的方式指向的是new出来的对象
    普通函数:this指向的是window对象
    
    构造函数:
    //构造函数,this指向通过new产生的对象arrl
        function arr(){
            this.name = "zhangsan";
            this.age = 20;
            console.log(this);

        }
         var arrl = new arr();
    
    普通函数:
     //普通函数。this指向window对象
    function arr(){
        this.name = "zhangsan";
        this.age = 20;
        console.log(this);
    }
    arr();

    //函数作为对象的一个属性,并且作为对象的一个属性被调用时,函数中的this指向该对象
    //创建一个对象
    var arr = {
        age:10,
        s:function(){
            console.log(this.age);//对象的属性,this指向的是对象arr
        }
    };
    arr.s();

     //函数作为对象的一个属性,并且作为对象的一个属性被调用时,谁调用函数,函数中的this指向该对象
    var arr = {
        age:10,
        s:function(){
            console.log(this.age);
        }
    };
    var arr2 = {
        age:20
    };
    //对象调用属性的方法
    //arr2调用.s函数,函数中的this指向该对象
    arr2.s = arr.s;
    arr2.s();//20

##call:


    加入call:this指向的是传入的值
    call是functiond的方法

指尖的流连9月20.

标签:

原文地址:http://www.cnblogs.com/sgl520/p/4824688.html

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