js语言基础练习(二)---------------函数的高级(了解),类和对象(重点)



函数基本知识总结:

1函数就是可以重复执行的代码

2.组成:参数、功能、返回值

3为什么要用函数,因为一部分代码的使用次数会汗多,封装起来,需要的时候调用

4函数不调用不执行

5同名函数会覆盖,后面的会覆盖前面的

6函数名等于整个函数

7 加载函数的时候只加载函数名,不加载函数体

8参数相当于局部变量

9两个平级的函数中变量不会相互影响

10 预解析:函数在解释文档的时候会被整体提到文档的最前面



函数高级+对象

目标:会自己定义一个构造函数,创建自定义对象。

函数高级    不需要重点记忆



1.

匿名函数(了解)

没有名字的函数,不需要定义函数名的时候,书写简便。有自己的调用方法

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<script>

    //匿名函数。 只定义不执行会报错?
   // (function (){
   //     console.log(1);
   // })

    //调用方法:(了解)
    //1.直接调用
    (function (){
        console.log(1);
    })();

    //2.绑定事件,会经常用到
    document.onclick = function () {
        alert(1);
    }

    //3.定时器
    setInterval(function () {
        console.log(444);
    },1000);

</script>
</body>
</html>

2.

函数是一种类型(了解)

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<script>
    //函数也是一种数据类型。但是,归根结底,他还是属于object。
    var str = "abc";
    var num = 111;
    var boo = true;
    var aaa;
    var bbb = null;//对象类型
    var arr = [];//对象类型

    function fn(){
        alert(1);
//        return 111;
    }

    console.log(typeof str);
    console.log(typeof num);
    console.log(typeof boo);
    console.log(typeof aaa);
    console.log(typeof bbb);
    console.log(typeof arr);
    console.log(typeof fn);
    // function
    console.log(typeof fn());
    // undefined ,fn()是函数执行的返回值

</script>
</body>
</html>

3.

递归(了解)就是函数自己调用自己,必须有跳出条件。

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<script>
    //递归是一种思想:类似于我们的计数器,开闭原则。
    //递归的实质就是函数自己调用自己。
    //递归注意点:递归必须有跳出条件,否则是死循环。
    var i = 1;

    fn();

    function fn(){
//        alert("从前有座山,山里有座庙...");
//        i++;
//        alert(i);
//        if(i>3){
//            return;
//        }
//        fn();
        alert("从前有座山,山里有座庙...");
        i++;
        alert(i);
        if(i<3){
            fn();
        }
    }

</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>

<script>

    //用递归求1+100和。
    alert(getSum(100));

    function getSum(n){
        //跳出条件
        if(n<1){
            return 0;
        }
        //累加
        return n + getSum(n-1);
    }

//    getSum(100) = 100 + 99 + 98+ ...+1+0;

//    function getSum(n){
//        //跳出条件
//        if(n<1){
//            return 0;
//        }
//        //累加
//        return 100 + 99+...+1+0;
//    }

</script>

</body>
</html>

4.

函数作为参数 (会用)回调函数,经常用

传递规则的时候使用回调函数

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<script>

    //执行函数就等于:函数名+();   整个函数+();
//    fn();
//    (function(){})()

    fn(test);
    //回调函数:函数作为参数进行传递和使用。函数调用别的函数
    // 传递函数名,就是传递整个函数
    function fn(demo){
        demo();
        // 函数名()代表执行函数
//        test();
    }

    function test(){
        console.log("我是被测试的函数!");
    }

</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<script>
    //什么情况下,使用回调函数?
    //回调函数一般是用于定义一个规则来使用的。
    //规则的传递只能通过函数实现。通过变量无法达成。所以我们需要传递规则的时候必须使用回调函数。
    console.log(fn(10,5,test1));
    console.log(fn(10,5,test2));
    console.log(fn(10,5,test3));
    console.log(fn(10,5,test4));

    function fn(num1,num2,demo){
        return demo(num1,num2);
    }

    //定义四个规则:加减乘除
    function test1(a,b){
        return a+b;
    }
    function test2(a,b){
        return a-b;
    }
    function test3(a,b){
        return a*b;
    }
    function test4(a,b){
        return a/b;
    }

</script>
</body>
</html>


1.学习对象的好处

为什么使用对象:方便

把大象装冰箱

把100万头大象装冰箱

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<script>
    //1.生活中。(找对象)
    //2.编程中。(封装信息)
    function printStuInfo(name,age,address){
        console.log(name);
        console.log(age);
        console.log(address);
    }

    function printStuInfo(student){
        console.log(student.name);
        console.log(student.age);
        console.log(student.address);
    }
</script>
</body>
</html>

面向过程:

面向对象:广义、

狭义封装成一个个的小对象,传递数据

2.什么是对象

对象:生活中具有唯一性的事物。

属性+方法

对象中的变量,对象中的函数

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<script>
    //生活中。一类事物和对象的区别。(对象是指具有唯一性的事物)
    //游戏中。有特指的事物是对象。
    //程序中。

    var hero = new Object();
    //自定义属性--状态
    hero.money = 10000;
    hero.level = 6;

    //方法---行为。
    hero.attack = function () {
        console.log("攻击了水晶!");
    }

    console.log(hero);
    console.log(hero.money);
    console.log(hero.level);
    hero.attack();

    //属性和方法:状态(名词)和行为(动词)。

</script>
</body>
</html>

3.构造函数创建对象,重点。

a)自定义对象(单个对象)

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<script>

    //需求:单个自定义对象。
    //缺点:传单单个对象的时候还好,创建多个多线的时候变得非常繁琐
    //for循环创建多个对象不能修改名字的值。函数也可以创建多个对象。
    var student = new Object();

//    console.log(student);
    student.name = "张三";
//    student.age = 18;
//    student.address = "辽宁省铁岭市莲花乡池水沟子";
    student.sayHi = function () {
        console.log(this.name+"说:大家好!");
        // 对象中的this代表对象本身
    }

    console.log(student.name);
    student.sayHi();

</script>
</body>
</html>

b)自定义对象(多个对象)

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<script>

    //需求:多个自定义对象。
    //缺点:代码冗余,方式比较low。当我们创建空白对象的时候:new Object();
    //利用构造函数自定义对象。

    var stu1 = createSudent("张三");
    var stu2 = createSudent("李四");
    console.log(stu1);
    stu1.sayHi();
    console.log(stu2);
    stu2.sayHi();
    //创建一个函数
    function createSudent(name){
        var student = new Object();
        student.name = name;
        // student的属性   局部变量(形参的name)
        student.sayHi = function () {
            console.log(this.name+"说:大家好!");
        }
        return student;
    }

</script>
</body>
</html>

3.自定义对象(利用构造函数)

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<script>

    //需求:多个自定义对象。
    //缺点:代码冗余,方式比较low。当我们创建空白对象的时候:new Object();
    //利用构造函数自定义对象。

    var stu1 = new Student("王五");
    // new stu()创建一个对象,不需要return
    var stu2 = new Student("赵六");

    console.log(stu1);
    stu1.sayHi();

    console.log(stu2);
    stu2.sayHi();

//    console.log(typeof stu1);
//    console.log(typeof stu2);

    //创建一个构造函数,首字母大写。创建对象终极版
    function Student(name){
        //构造函数中的对象指的是this。
        this.name = name;
        this.sayHi = function () {
            console.log(this.name+"说:大家好!");
        }
    }
</script>
</body>
</html>

4.this和new

this
一、this只出现在函数中。
二、谁调用函数,this就指的是谁。
三、new People(); People中的this代指被创建的对象实例。等同于把this设置为当前对象

var aaa = new Object();
new
1.开辟内存空间,存储新创建的对象( new Object() )
2.把this设置为当前对象
3.执行内部代码,设置对象属性和方法
4.返回新创建的对象

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<script>

    var aaa = new stu();
    // 存储新创建的对象,返回新创建的对象
    console.log(aaa);
    aaa.say();

    function stu(){
        this.say = function () {
            console.log(this);
            //2.把this设置为当前对象 把this指向当前对象
        }
    }

</script>
</body>
</html>

5.属性绑定,扩展

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<script>

    var stu = new Object();
    var aaa = "age";
// 属性绑定1;对象名.属性  2.对象名[变量/字符串/值]

    //对象名.属性
    stu.name = "拴柱";
//    stu.aaa = 19;  绑定的是aaa stu{name:拴住,aaa:19}
    //对象名[变量]   对象名[值]
    stu[aaa] = 20;
    // stu{name:拴住,age}
    stu[0] = "你好";
    // stu{0:你好;name,age}

    console.log(stu);

//    var arr = [1,2,3];
//    arr[0] = 4;

</script>
</body>
</html>
时间: 2024-08-09 21:39:57

js语言基础练习(二)---------------函数的高级(了解),类和对象(重点)的相关文章

go语言基础(main函数、数据类型)

go语言基础(main函数.数据类型) 1.Go语言介绍 Go语言是云计算时代的c语言 c和c++这类语言提供了很快的执行速度,而Rudy和python这类语言则擅长快速开发.Go语言则介于两者之间,不仅提供了高性能的语言,同时也让开发更快速 优势 部署简单,可直接编译成机器码.不依赖其他库,部署就是扔一个文件上去就完成了 静态类型语言(c是静态语言.python解释性语言),但是有动态语言的感觉,静态类型的语言就是可以在编译的时候检查出来隐藏的大多数问题,动态语言的感觉就是有很多的包可以使用,

python基础-第七篇-7.1初识类和对象

创建类和对象 刚开始我们接触得多的编程方式为面向过程编程,这种方式就是根据业务逻辑从上往下垒代码,后来又出现了函数式编程,就是为了提高代码的重用性,减轻程序猿的工作量--而今天我们即将学的 面向对象编程则是使用类和对象来实现的,类就是一个模板,模板里可以包含多个函数,函数里实现一些功能 对象则是根据模板创建的实例,通过实例对象可以执行类中的函数 class是关键字,表示类 创建对象--类名称后加括号 #创建类 class foo: def bar(self): print('bar') def

观V8源码中的array.js,解析 Array.prototype.slice为什么能将类数组对象转为真正的数组?

在官方的解释中,如[mdn] The slice() method returns a shallow copy of a portion of an array into a new array object. 简单的说就是根据参数,返回数组的一部分的copy.所以了解其内部实现才能确定它是如何工作的.所以查看V8源码中的Array.js     可以看到如下的代码: 一.方法  ArraySlice,源码地址,直接添加到Array.prototype上的"入口",内部经过参数.类型

黑马程序员_ C语言基础(二)

概览 今天基础知识分为以下几点内容(注意:循环.条件语句在此不再赘述): 1.Hello World 2.运行过程 3.数据类型 4.运算符 5.常用函数 Hello World 既然是IOS开发系列首先看一下在Mac OS X中的C的运行 打开Xcode 选择命令行程序 填写项目名称并选择使用C语言 选择保存目录 自动生成如下代码 OK,在Xcode上我们编写自己的程序如下 // // main.c // C语言基础 // // Created by Kenshin Cui on 14-7-1

【Python基础】lpthw - Exercise 40 模块、类和对象

一. 模块(module) 模块中包含一些函数和变量,在其他程序中使用该模块的内容时,需要先将模块import进去,再使用.操作符获取函数或变量,如 1 # This goes in mystuff.py 2 def apple(): 3 print("This is an apple.") 4 5 pear = "This is a pear." 1 import mystuff as ms 2 ms.apple() 3 4 print(ms.pear) 输出为

scala快速学习笔记(二):控制结构,类和对象

IV.控制结构 1.if/else 除基本用法外,if/else语句能用来赋值,进而代替?:运算符.这得益于在Scala中,每个语句块都有值,就是该语句块最后一个语句的值.请看下面的代码. def abs(x: Int) = if(x < 0) -x else x 2.与If语句不同,While语句本身没有值,即整个While语句的结果是Unit类型的(). PS:scala中赋值语句也没有值. 3.用于迭代一个集合的for语句,格式为for(item <- collection).一些col

js语言基础练习(二)---------------函数的基础知识

函数概述.参数.返回值.函数名函数体和函数加载问题.函数声明.变量和作用域.隐式全局变量.变量声明提升. 1.函数的定义和使用 函数 ,具有一定功能的代码块 可以重复执行的代码块 函数不调用不执行  执行方法 fn() 函数定义 function fn(){} 预解析  function 和变量 函数调用可以在函数定义之前 <!DOCTYPE html> <html> <head> <title>函数的定义和使用</title> </hea

Go语言基础(二)-----高级数据类型

Go语言-数组类型 一个数组(Array)就是一个可以容纳若干类型相同的元素的容器.这个容器的大小(即数组的长度)是固定的,且是体现在数组的类型字面量之中的.比如,我们声明了一个数组类型: type MyNumbers [3]int 注:类型声明语句由关键字type.类型名称和类型字面量组成. 所谓类型字面量,就是用于表示某个类型的字面表示(或称标记方法).相对的,用于表示某个类型的值的字面表示可被称为值字面量,或简称为字面量.比如之前提到过的3.7E-2就可被称为浮点数字面量. 类型字面量[3

C语言基础扩充(二)

scanf()函数基础扩充: C函数库包含了多个输入函数,其中最常用的差不多就是scanf()了,它可以读取各种格式的输入. scanf()可以把输入的字符串转换成我们想要的各种形式,整数.浮点数.字符串等等,它是printf()的逆过程.和printf()一样都有控制字符串和参数列表,不同的是scanf()的参数列表是指向变量的指针. #include <stdio.h> int main() { int age; float height; char address[30]; printf