js-day06

本文详细介绍了JavaScript中的函数作用域、递归、匿名函数、系统函数以及对象的概念和使用。内容包括函数提升、作用域链、递归的边界条件、匿名函数的自调用和回调函数、JS内置函数如isNaN和eval的使用,以及如何创建和访问对象的属性。通过实例展示了对象字面量、内置构造函数创建对象,并给出了遍历对象属性的方法。
摘要由CSDN通过智能技术生成

一、函数的作用域

全局函数:在全局作用域下创建的函数,可以在任意的作用域下调用.

局部函数:在函数作用域下创建的函数,只能在所在的函数作用域下调用

作用域链:多个作用域嵌套形成的结构,在查找变量的时候,首先会到当前作用域下查找,如果当前没有会不断的往上一级作用域查找

函数提升:程序执行前,会将创建的函数提升到所在作用域的最前边

二、递归

在函数的内部调用自身这个函数

递归默认是一个死循环,使用不当造成内存泄漏

内存泄漏:操作系统分配给js空间被占用,无法存储新的数据

使用:在递归之前有边界条件,结合着return

/*var count=0;//用于计数
function say() {
    console.log('从前有座山');
    count++;
    //判断是否为3------边界条件
    if(count===3){
        //结束函数调用
       return;
    }
    //递归
        say();    
    }
say();//从前有座山 从前有座山 从前有座山

//使用递归计算n的阶乘

function getS(n) {
    //边界条件:当n为1的时候,返回1
    if(n===1){
        return 1;
    }

    //递归
    return n*getS(n-1);
}
console.log( getS(5) );//120

兔子

三、匿名函数(重要)

function (){}

1.创建函数

函数表达式

var fun=function(){

}

函数声明

function fn(){

}

对比函数名称()函数名称的区别

函数名称()      调用函数,执行函数体中的代码

函数名称         本质上就是一个变量,保存了函数类型数据

//使用匿名函数创建函数getSum,传递任意两个数字,返回两者之间所有整数的和.

var getSum=function (n1,n2){
    //获取n1~n2之间所有整数的和
    for(var i=n1,sum=0;i<=n2;i++){
        sum+=i;
    }
    return sum;
}
console.log(getSum(1,100));

对比函数声明函数表达式创建函数的区别

函数声明创建的函数存在函数的整体提升

函数表达式创建的函数只是存在变量声明提升

//面试题

console.log(c);//ƒ c() {   = function
var c=5; //用5覆盖之前保存的函数
function  c() {  //var c=function(){}
    console.log(2);
    
}
console.log(c);//5

2.匿名函数自调用

全局污染:局变量的出现产生影响,任何作用域都可以访问全局变量

function(){ 

        //在一个函数作用域下,声明的变量是局部变量,可以防止全局污染

})();

3.回调函数

将函数作为参数传递

fn(1) fn('ok') fn(true) fn(fun)  funfunction(){})

function tao(madai){

        madai();//调用传递的回调函数

}

function  xin(){}

tao (xin);

tao (function(){  });

四.系统函数

就是JS提供的函数,可以直接调用

isNaN()  检测一个字符串中是否含有非数字,会隐式转换为数值查看是否为NaN,   是>true  不是 >false

练习:声明变量保存用户输入的值,如果输入的值含有非数字,打印'非法的数量'

eval( )执行字符串中的表达式

五.对象

对象是一组属性和方法的集合

一部手机,属性有颜色/品牌/cpu/内存.........方法(功能):打电话/发短信/看视频/办公............

万物皆对象

1.JS中的对象

内置对象,JS提供的对象

自定义对象,自己创建的对象

宿主对象,根据不同的执行环境划分

2.创建自定义对象

(1)对象字面量

(2)内置构造函数

(3)自定义构造函数

3.对象字面量

{属性名:属性值,属性名:属性值....}

属性名的引号可以省略,如果含有特殊字符必须添加

练习:创建一个员工对象,包含员工的编号,姓名,性别,工资

var staff={
    id:12,
    name:'张三',
    sex:'男',
    salary:15000
};
console.log(staff);
//console.log(staff);
//访问属性
//console.log(staff.name);//张三
//console.log(staff['dept-name'],staff['salary']);//研发部 15000
//console.log(staff.birthday);//undefined
staff.salary=100000;
staff.birthday='1973-8-3';
console.log(staff);

4.属性的访问

对象.属性名  对象['属性名']

如果访问的属性不存在,则返回undefined

练习:创建一个图书对象,包含的属性有编号,标题,作者,价格;修改价格属性,添加出版社属性;最后打印输出对象

var books={
    id:12,
    title:'步步惊心',
    autor:'于正',
    price:20,
    press:'人民邮电'
};
books.price=30;
console.log(books);

5.内置构造函数

new Object()

创建一个空对象{},需要单独添加属性

练习:创建班级的对象,包含的属性有编号,中心名称,学员人数.

var team=new Object();
team.id=1;
team.name='web前端';
team.number=20;
console.log(team);//{id: 1, name: 'web前端', number: 20}

6.遍历属性

依次访问对象中每个属性

for(var k in 对象){

k 每个属性名

对象[k]   属性值

}

课后任务

1.复习

2.练习:字面量创建对象,包含一组成绩,遍历对象得到每个成绩,计算出总成绩和平均成绩

var grade={

    xiaoming:90,

    xiaolan:85,

    xiaolv:70,

    xiaowei:98

}

var sum=0;

var count=0;

for(var n in grade){

    sum+=grade[n];

    count++;

}

console.log(sum,count,sum/count);

var student={

        s1:80,

        s2:90,

        s3:98,

        s4:75

}

var sum=0;

 

3.预习数组

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值