ECMAScript闭包
ECMAScript 最易让人误解的一点是,它支持闭包(closure)。
闭包,指的是词法表示包括不被计算的变量的函数,也就是说,函数可以使用函数之外定义的变量。
1、简单的闭包实例
在 ECMAScript 中使用全局变量是一个简单的闭包实例。
解释程序知道在调用该函数时要检查 sMessage 的值。sMessage 将在函数调用 sayHelloWorld() 时(最后一行)被赋值,显示消息。
2、复杂的闭包实例
在一个函数中定义另一个会使闭包变得更加复杂。
内部函数是一个闭包,因为它将获取外部函数的参数 iNum1 和 iNum2 以及全局变量 iBaseNum 的值。 addNum() 的最后一步调用了 doAdd(),把两个参数和全局变量相加,并返回它们的和。
函数根本不接受参数,它使用的值是从执行环境中获取的。
闭包是 ECMAScript 中非常强大多用的一部分,可用于执行复杂的计算。
ECMAScript闭包
1、通过对象字面量的形式创建对象
Javascript关键字必须放到引号之间
2、通过new Object()创建对象
var obj3=new Object();//创建一个空对象,{}
var arr=new Array();//空数组,[]
var date=new Date();//日期时间对象
var reg=new RegExp('js');//创建正则对象
3、通过Object.create()创建对象
var obj6=Object.create({x:1});
var obj7=Object.create(null);
4、通过构造函数的形式创建对象
function Test(){
}
var obj4=new Test();
function Test1(num1,num2){
this.n1=num1;
this.n2=num2;
}
var obj5=new Test1(5,6);
alert(typeof obj5);
alert(obj5 instanceof Test1);
查询属性,对象属性名/对象["属性名"]
如果属性不确定需要使用[]
添加属性
修改指定属性
通过delete删除指定属性
通过for/in遍历属性
对象中有方法
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script type="text/javascript">
var person={
username:'king',
age:12,
salary:1234.56,
addr:'北京',
sex:'男',
};
//查询属性,对象.属性名/对象["属性名"]
//console.log('用户名为:'+person.username+"\n"+'性别:'+person.sex);
//console.log('薪水:'+person['salary']+'\n'+'地址:'+person["addr"]);
//如果属性不确定需要使用[]
var key='username';
//console.log(person.key);
//console.log(person[key]);
//console.log(person['key']);
function PersonInfo(name,age,sex){
this.name=name;
this.age=age;
this.sex=sex;
}
var person1=new PersonInfo('king',34,'男');
//console.log(person1.name+person['sex']);
//添加属性
var obj={};//空对象
obj.username='king';
obj.age=12;
obj.addr='北京';
obj['test']='this is a test';
//console.log(obj.username+'\n'+obj.age+'\n'+obj.addr+'\n'+obj['test']);
//修改指定属性
obj.username='queen';
obj['test']='ymt';
//console.log('修改之后的名字'+obj.username);
//console.log(obj['test']);
//通过delete删除指定属性
delete obj['test'];
//console.log(obj['test']);
delete obj.username;
//console.log(obj['username']);
//通过for/in遍历属性
var obj1={
x:1,
y:2,
test:'this is a test',
edu:'ymt'
};
for(var p in obj1){
//console.log(p+'\n');
}
//对象中有方法
var obj2={
username:'king',
age:12,
addr:'北京',
sayHi:function (){
return 'say Hi';
},
info:function(){
return '用户名:'+this.username+'\n'+'龄:'+this.age+'\n地址:'+this.addr;
}
};
//console.log(obj2.sayHi());
//console.log(obj2.info());
//console.log(obj2.info);
function Person(username,age,sex,addr){
this.username=username;
this.age=age;
this.sex=sex;
this.addr=addr;
this.info=function(){
return this.username+this.addr;
}
}
var p1=new Person('queen',34,'女','上海');
//console.log(p1.info());
p1.test='this is a test';
//console.log(p1.test);
p1.info1=function(){
return 'this is a test1111';
};
console.log(p1.info1());
</script>
</body>
</html>