一、作用域
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");