来源博客:【Harryの心阁】
arguments的作用
- 具有数字的length属性
- 按照索引的方式进行存储的
- 他没有真正数组的一些方法pop()push()等等
- 里面村粗了所有传递过来的实参,伪数组
- 只有函数才有arguments对象
arguments的使用
- 利用函数求任意个数的最大值
function getMax(){
var max = arguments[0];
for(var i = 1; i <= arguments.length; i++){
if (arguments[i] > max){
max = arguments[i];
}
}
return max;
}
console.log(getMax(1,2,31,231,3,21,412,12));
- 翻转数组
function reverse(arr){
var newArr = [];
for(var i = arr.length - 1; i >= 0; i--){
newArr[newArr.length] = arr[i];
}
return newArr;
}
var arr1 = reverse([1,2,31,412,3124])
console.log(arr1)
- 冒泡排序
function sort(arr){
for(var i = 0; i < arr.length -1; i++){
for(var j = 0; j <= arr.length - i - 1; j++){
if (arr[j]>arr[j+1]){
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
return arr;
}
var arr1 = sort([2,121,411,2312,51,312,12,31,3,12,3,12412]);
console.log(arr1);
- 闰年函数封装
function isRunYear(year){
var flag = false;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0){
flag = true;
}
return flag;
}
console.log(isRunYear(2000));
console.log(isRunYear(1999));
- 判断年份的2月份天数,函数封装
function backDay(){
var year = prompt('请输入年份');
if (isRunYear()){
alert('您输入的年份'+year+'年'+'是闰年,2月份有29天')
}else{
alert('您输入的年份'+year+'年'+'是平年2月份有28天')
}
}
backDay();
function isRunYear(year){
var flag = false;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0){
flag = true;
}
return flag;
}
函数声明方式
- 利用函数关键字自定义函数(命名函数)
function fn(){}
- 函数表达式I(匿名函数)
var fn = function(){}
- 函数表达式里面存的是函数
- 函数表达式也可以进行传递参数
作用域
- 代码名字变量在某个范围内起作用和效果目的是为了提高程序的可靠性
- 更重要的是
减少命名冲突
- 全局作用域,局部作用域
- 全局变量,在全局作用下的变量 在全局下都可以使用,
如果在函数内部不声明直接使用
属于全局变量,全局变量比较占内存资源 - 局部作用 在局部作用域下的变量,只能在函数内部输出,函数形参也可以看做局部变量
- 块级作用域
if{} for{}
- 全局作用域
整个script,或者在一个单独的文件
- 局部作用域
在函数内部起效果
作用域链
内部函数
访问外部函数
的变量,采取的是链式查找
的方式来决定取值- 就近原则
预解析
- js引擎运行: 预解析 代码执行
- 把所有的var和funtion提升到当前作用域的最前面
- 从上到下执行
- 预解析 分为变量预解析,函数预解析
- 变量提升: 不提升赋值
- 函数提升: 不调用函数
- 函数表达式,调用必须写在函数表达式下面
f1();
console.log('c'+c);
console.log('b'+b);
console.log('a'+a);
function f1() {
var a = b = c = 9; /*相当于var a = 9; b=9; c=9;b和c未定义,为全局变量,a为局部变量,外面无法调用*/
console.log('a'+a);
console.log('b'+b);
console.log('c'+c);
}
对象
- 一组无序的相关属性和方法,属性十五的特征,方法事物的行为
- 创建对象,利用字面量
var obj = {}
键值对 - 方法冒号后面跟的是一个匿名函数
- 调用属性的方法
对象名.属性名
对象名['属性名']
- 调用对象的方法
对象名.函数名
变量,属性,函数,方法的区别
- 变量 单独声明并赋值, 使用的时候直接写变量名,单独存在
- 属性 在对象里面的不需要声明,使用的时候必须是 对象.属性
函数和方法
- 都是实现某种功能
- 函数是单独声明,并且 调用的 函数名() 单独存在的
- 方法 在对象里面调用的时候 对象.方法()
创建对象
- 创建对象,利用字面量
var obj = {}
键值对 - 利用new Object创建对象
var obj = new Object();
- 利用函数方法重复相同的代码 构造函数,把相同的属性和方法抽取出来封装到函数中
- 语法格式
- 构造函数的
function 构造函数名(){
this.属性 = 值;
this.方法 = function(){}
}
- 写公共的属性,构造函数名字首字母要大写
- 我们构造函数不需要return,就可以返回结果,使用形参和实参,
new
生成对象 - 属性和方法前必须添加
this
- 利用构造函数创建对象的过程称为
对象的实例化
- new
- 在内存中创建了一个新的空对象
- 让this指向这个新的对象
- 执行构造函数里面的代码,给这个新对象添加属性和方法
- 返回这个新对象,构造函数里面不需要return
遍历对象
- for…in
for(变量 in 对象){}
,一般使用k/key - for…in语句用于对对象的属性进行循环操作