一
Arguments的使用,当我们不确定有多少个参数传递的时候,可以使用arguments来获取。在JavaScript中,arguments实际上是当前函数的一个内置对象。所有函数都内置了一个arguments对象,arguments对象中存储了传递的所有实参。
Arguments展示形式是一个伪数组,因此可以进行遍历。具有数组的length属性。按照索引的方式进行存储。没有一些真正数组的方法。
//只有函数才有arguments对象
function fn(){
console.log(arguments);//里面存储了传递过来的实参。
console.log(arguments.length);
console.log(arguments[2]);
}
fn(1,2,3);
二.函数的声明方式
1.利用函数关键字自定义函数(命名函数)
2.函数表达式
//1.利用函数关键字自定义函数
function fn(){};
//2.函数表达式(匿名函数)
var 变量名=function(){};
变量名();//调用函数
三.作用域
作用域就是代码名字在某个范围内起作用和效果,目的就是为了提高程序的可靠性更重要的是减少命名冲突。
全局作用域:整个script标签 或者单独的一个js文件。
局部作用域:在函数内部就是局部作用域,这个代码的名字只在函数内部起效果和作用。
变量的作用域,根据作用域的不同我们变量分为全局变量和局部变量。
注意:如果在函数内部没有声明直接赋值的变量也是全局变量。
注意:函数的形参也可以看作是局部变量
function fun(){
var num1=10;
num2=20;
}
fun();
console.log(num1);
console.log(num2);
全局变量只有浏览器关闭的时候才会销毁,比较占内存资源、
局部变量,当我们程序执行完毕之后就会销毁。
Js也是在es6的时候新增的块级作用域。
作用域链:
如果函数中还有函数,那么在这个作用域中又可以诞生一个作用域
根据在内部函数可以访问外部函数变量的这种机制,用链式查找决定哪些数据能被内部函数访问,就称作作用域链。
function f1(){
var num=123;
function f2(){
console.log(num);//输出结果为123
}
f2();
}
var num=456;
f1();
四.预解析
Js代码是由浏览器中的js解析器来执行的,js解析器在运行js代码的时候分为两步:预解析和代码执行。
预解析 js引擎会把js里面所有的var还有function提升到当前作用域的最前面。
预解析分为变量预解析(变量提升)和函数预解析(函数提升)
console.log(num);//undefined
var num=10;
fun();//调用不了,会报错
var fun=function(){
console.log(22);
}
五.对象
对象是一个具体的事物。
在js中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象。
对象是由属性和方法组成的。
属性:事物的特征,在对象中用属性来表示
方法:食物的行为,在对象中用方法来表示
在js中,采用三种方式创建对象
利用字面量创建对象
利用new object创建对象
利用构造函数创建对象
var obj={};//创建了一个空的对象
var obj={
uname:'张三丰',//属性或者方法采取键值对的形式,中间有冒号
age:'18',//多个属性或者方法中间用逗号隔开
sex:'男',
sayHi:function(){//方法冒号后面跟的是一个匿名函数
console.log('hi');
}
}
//用对象名.属性名调用对象的属性
console.log(obj.uname);
//对象名[‘属性名’]
console.log(obj['age']);
//对象名.方法名调用对象的方法
obj.sayHi();
//利用new object创建对象
var obj=new Object();
obj.name='张三丰';
obj.age='18';
obj.sayHi=function(){
console.log('hi');
}
因为前面两种创建对象的方式一次只能创建一个对象,所有,可以用构造函数来创建对象。
构造函数就是把对象里面相同的属性和方法抽取出来封装到函数里面。
//构造函数的语法结构
function 构造函数名(){
this.属性=值;
this.方法=function(){
}
}
function Star(uname,age,sex){//构造函数名首字母大写
this.name=uname;
this.age=age;
this.sex=sex;
//构造函数不需要return就可以返回结果
}
var ldh=new Star('刘德华',18,'男');
console.log(typeof ldh);
var obj={
uname:'张三丰',
age:'18',
sex:'男',
}
//遍历对象
//for in 语句用于对数组或者对象的属性进行循环操作
for(变量 in 对象){
}
for(var k in obj){
console.log(k);//输出的是属性名
console.log(obj[k]);//输出的是属性值
}