arguments 的使用
只有函数才有argument 对象,而且每个函数都内置了这个argument
里面存储所有传递过来的实参
演示形式是一个伪数组
伪数组:并不是真正意义上的数组
1.具有数组的length属性
2.按照索引的方式进行存储
3.没有真正数组的一些方法 pop() push()等等
冒泡循环
1.内外两循环
外层控制趟数 i<arr.length-1
内层控制趟数 j<arr.length-i-1
交换变量t
函数的两种声明方式
1.利用函数关键字自定义函数
function fn(){
}
fn();
2.函数表达式
var fun=function(){
console.log(‘我是函数表达式’);
};
fun();
fun是变量名 不是函数名
函数表达式声明方式跟声明变量差不多,只不过便令里面存的是值,而函数表达式里面存的是函数
函数表达式也可以进行传递参数
作用域
就是代码名字(变量)在某个范围内起的作用和效果,木得事为了提高程序的可靠性和减少命名冲突
js的作用域(es6)之前,全局作用域,局部作用域
全局作用域:整个script标签 或者是一个单独的js文件
var num=10;
局部作用域(函数作用域):在函数内部就是局部作用域,只在函数内部其效果和作用
全部变量
1.在全局作用域下的变量
2.如果在函数内部,没有声明直接赋值的变量也叫作全局变量
局部变量
在局部作用域下的变量 在函数内部的变量
函数的形参也可以看成是局部变量
全局变量只有浏览器关闭的事后才会被销毁,比较占内存
局部变量:只有函数内部使用
对象:一个具体的事物
属性:事物的特征
方法:对象的行为
var obj={}; 创建了一个空的对象
var obj={
name:‘zhangsanfeng’,
age:14,
sex:女,
sayhi:function();
}
调用对象的属性名;
1.对象.属性名
2.对象[‘属性名’]
调用对象的方法
对象.方法
变量,属性,函数,方法的区别
1.变量和属性相同的 他们都是用来存储数据
变量 单独声明并赋值
属性 在对象里面的不需要声明
2.函数和方法的相同点 都是实现某种功能
函数单独声明 函数名()来调用
方法在对象里面 对象.方法()来调用
创建对象
var obj=new Object(); 创建了一个空对象
obj.name=‘张三丰’;
obj.age=12;
obj.sex=‘nan’;
obj.sayhi=function(){
console.log(‘hi’);
}
console.log(obj.name);
console.log(obj.sayhi);
构造函数的语法格式
function 构造函数名(){
this.属性=值;
this.方法=function(){
}
}
用new进行调用
new 构造函数名();
new关键字执行过程
1.new 构造函数可以再内存中创建了一个空的对象
2.this救护指向刚才创建的空对象
3.指向构造函数里面的代码,给这个对象添加属性和方法
4.返回这个新对象(所以构造函数不需要return)
for in 遍历对象
for(变量 in 对象)
for(var k in obj){
consolelog(k); k变量输出 得到的是属性名
console.log(obj[k]); obj[k] 得到的是属性值
}
查文档
mdn
创建函数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
var obj=new Object(); //创建了一个空对象
obj.name='张三丰';
obj.age=12;
obj.sex='nan';
obj.sayhi=function(){
console.log('hi');
}
console.log(obj.name);
obj.sayhi();
console.log(obj['sex']);
</script>
</head>
<body>
</body>
</html>
遍历对象
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
var obj={
name:'张三丰',
age:12,
sex:'nan',
sayhi:function(){
console.log('hi');
}
}
//for in 遍历对象
//for(变量 in对象)
for(var k in obj){
console.log(k); // k变量输出 得到的是属性名 k不需要赋值
console.log(obj[k]); // obj[k] 得到的是属性值
}
</script>
</head>
<body>
</body>
</html>
构造函数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
function Star(name,age,sex){
this.name=name;
this.age=age;
this.sex=sex; //构造函数名字首字母要大写
this.sing=function(sang){
console.log(sang);
}
}
var liudehua=new Star('刘德华',18,'男'); //构造函数不需要return就可以返回结果
console.log(typeof liudehua); //调用函数返回的是一个对象
console.log(liudehua.age);
console.log(liudehua.sex);
liudehua.sing('冰雨');
console.log(liudehua);
var zxy=new Star('张学友',19,'男');
console.log(typeof zxy); //调用函数返回的是一个对象
console.log(zxy.age);
console.log(zxy.sex); // 我们只要new Star() 调用函数就回创建一个对象liudehua
zxy.sing('李香兰'); // 一定要用this区别创建的对象
//构造函数创建对象的过程也叫作对象的实例化
</script>
</head>
<body>
</body>
</html>
封装自己的数学对象
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
var myMath={
PI:3.1415926,
max:function(){
var max=arguments[0];
for(var i=1;i<arguments.length;i++){
if(arguments[i]>max){
max=arguments[i];
}
}
return max;
},
min:function(){
var min=arguments[0];
for(var i=1;i<arguments.length;i++){
if(arguments[i]<min){
min=arguments[i];
}
}
return min;
}
}
console.log(myMath.PI);
console.log(myMath.max(23,34,78));
console.log(myMath.min(1231,1,23.5));
</script>
</head>
<body>
</body>
</html>