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");

猜你喜欢

转载自blog.csdn.net/qq_31655771/article/details/80480019