zoukankan      html  css  js  c++  java
  • JavaScript(6):作用域、面向对象

        一、作用域

        1.其他语言:以代码块作为作用域

    public void Func(){
        if(1==1){
            string name = "java";
        }
        print("name");
    }
    Func()    //报错,因为参数name只是作用域为if结构内的局部变量
        2.python:以函数为作用域
    情况一:
        def func():
            if i==1:
                name="alex"
            print(name)
        func()       //输出alex
    情况二:
        def func():
            if i==1:
                name="alex"
            print(name)
        func()       //输出alex
        print(name)  //报错,name只是作用域为func函数结构内的局部变量
        3.JavaScript:以函数为作用域
    function func(){
        if(1==1){
            var name="alex";
        }
        console.log(name);
    }
    func()     //输出alex

        二、JavaScript的作用域

        1.以函数作为作用域

        2.函数的作用域在函数未被调用之前就已经被创建了

        3.函数的作用域存在作用域链,并且也是在被调用之前创建

    xo="alex";
    function func(){
      var xo="eric";
      function inner(){
        console.log(xo);
      }
      return inner;
    }
    var ret=func();
    ret();        //输出eric
    xo="alex";
    function func(){
      var xo="eric";
      function inner(){
        console.log(xo);
      }
      var xo="tony";
      return inner;
    }
    var ret=func();
    ret();        //输出tony

        4.函数内部局部变量提前声明,但是其亦遵循顺序执行

    function func(){
        console.log(xxoo);
        var xxoo="alex";      //解释过程中: var xxoo;
    }
    func();      //输出为undefined,说明内部变量已被提前声明,同时其亦遵循顺序执行

        三、面向对象

        1.JS中的对象创建

    function Foo(n){                //用函数的方式创建“类”
        this.name = n;
        this.sayName = function(){
            console.log(this.name);
        }
    }
    
    var obj1 = new Foo("we");
    obj1.sayName();
    
    var obj=new Foo("wee");
    obj2.sayName();

        2.原型

        上段(三、1)中的代码比较占用空间,因为由(二、2)可知每个对象都会封存属于自己的sayName。为了节约存储空间,可以使用原型。

    function Foo(n){
        this.name = n;
    }
    #以下即在为Foo构建原型
    Foo.prototype={
        "sayName":function(){
            console.log(this.name);
        }
    }
    obj1 = new Foo("we");
    obj1.sayName();
    
    obj2=new Foo("wee");
  • 相关阅读:
    linux 图形界面形式和命令行形式
    linux 配置 jdk7
    StackOverflowError
    一次失败的svchost hacking
    VB调用API的学习
    植物打僵尸休闲花园外挂代码
    中文日文翻译工具
    vb跨域访问,获得特定的frame进行处理
    HTML对象库简介(Microsoft HTML Object Library > mshtml.tlb)
    用正则分析一段vb代码含有哪些过程或者函数
  • 原文地址:https://www.cnblogs.com/wangchongzhangdan/p/9409631.html
Copyright © 2011-2022 走看看