js重点

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <script type="text/javascript">
//            function add (){
//                var a = 3;
//                return a
//            }
            //一般情况下,函数声明的局部变量,在函数调用完之后就会被销毁掉
//            console.log(add())
//            add()
//            
//            
//            function add(){
//                var a = 3
//                return function(){
//                    return a
//                }
//            }
//            
//            abc = add()
//            console.log(abc())

            //闭包的好处
            
//            var list = [f0,f1,f2]
//            f0()---->0
//            f1()---->1
//            f2()---->2
            //假设需要一个列表,这个列表存放n个函数,只要调用list[i](),那么就会返回i
            
            //-----------------------------------案例1:
//            var list = []
//            
//            for(var i=0;i<3;i++){
//                var temfn = function(){
//                    return i
//                }
//                list.push(temfn)//将函数添加进列表
//            }
//            
//            console.log(list)
//            list[0]() //====> 3
            
            //----------------------------------案例1:解决方案
            
            var list = []
            for (var i=0;i<3;i++){
                //匿名函数通过自己调用自己执行,获取i值传入num参数
                //num参数这个变量被返回的匿名函数所引用,所以参数num不会被销毁,使得num参数可以保留。
                var temfn = (function(num){
                    return function(){
                        return num
                    }
                })(i)
                list.push(temfn)
            }
            
//            console.log(list[0]())
            
            
            function Counter(){
                var num = 0
                return function(){
                    num ++
                    return num;
                }
            }
            
            var abc = Counter()
            console.log(abc())
            console.log(abc())
            console.log(abc())
            
            //能不用闭包,就尽量不用闭包,因为会导致内存的可使用量下降(内存泄漏)
            
        </script>
    </body>
</html>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <script type="text/javascript">
//            a = add(3,4)
//            console.log(a)
        
        //将一个匿名函数给到1个变量
//            var add = function(a,b){
//                a = a + 1;
//                b = b + 1;
//                return a+b
//                
//                console.log(123)
//            }
            
        //直接申明函数的方式    
//            function add (a,b){
//                a = a + 1;
//                b = b + 1;
//                return a+b
//            }
        //注意:直接申明函数的方式,浏览器会自动将它提升到最前面。
        
        //js不会对函数的参数进行检查
//        a = add()
//        console.log(a)
//        
        //返回值通过return返回出去,return语句执行之后,不会再继续执行函数后面的内容。
        
        
//        function add(a=3,b=4){
//            console.log(a,b)
//            a = a + 1;
//            b = b + 1;
//            
//            return a+b
//        }

        function add(a,b){
            if(a==undefined){
                a = 3
            }
            if(b == undefined){
                b = 4
            }
            a = a + 1;
            b = b + 1;
            
            return a+b
        }
        
        console.log(add())
        var student = {name:'xx',age:16}
        
        function abc(){
            //在函数里面,用var申明使这个函数的局部变量,在其他地方是拿不到的
            var num = 3
            var student = {name:'666'}
            return student.name
        }
        
        
        
        
        console.log(abc()) 
        </script>
    </body>
</html>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <script type="text/javascript">
            //1、字面量的方式,偶尔创建一个特定的对象,那么就是最简单和便捷方式
            var student = {
                name:'xx',
                age:'xx'
            }
            //2、构造函数的方式
            var student = {}//构造一个新的空对象
            var student = new Object()//构造一个新的空对象
            
            student.name = 'xx'
            student.age = 'xx'
            
            //3、创建一个函数来构造一个对象,工厂模式
            function Student(name,age){
                var student = {}
                student.name = name;
                student.age = age
                return student
            }
            
            var s1 =  Student('xx','xx');
            var s2 =  Student('mingzi','nianling')
            
            //4、构造一个构造函数,通过构造函数,实例化一个对象
            function Student(name,age){
                this.name = name;
                this.age = age
                this.showName = function(){
                    console.log(this.name)
                }
                //没有返回值
            }
            
            var s3 = new Student('gzhanshu','xxx')
            //如果使用了new 调用函数,那么首先会创建1个对象,并且将这个对象赋值s3,如果函数里有this,那么这个this就是这个新创建的对象
            var s4 = Student('yyy','uuu')//如果没有new,就是一个普通函数,那么普通函数没有返回值,就是未定义
            
            
        </script>
    </body>
</html>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <script type="text/javascript">
            //构造一个构造函数,通过构造函数,实例化一个对象
            function Student(name,age){
                this.name = name;
                this.age = age
                console.log(name)
                //没有返回值
            }
            
            
            function Man(){
                this.run= function(){
                    console.log('会跑')
                }
                this.showName = function(){
                    console.log(this.name)
                }
            }
            
            var man = new Man()
            //设定构造函数对象的属性prototype,将原型对象给到这个prototype属性
            Student.prototype = man
            
            var s3 = new Student('gzhanshu','xxx')
            
            //原型对象也可以有原型,那么原型的原型所形成的链式,那么就叫做原型链
            //原型里面属性方法可以被,实例化的对象共享。大大的减少内存的消耗
        </script>
    </body>
</html>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <script type="text/javascript">
            //对象也存放一组数据的地方
            //student,学生姓名,学生年龄,会考试,会读书,会唱歌
            
            
            //字面量的方式
            var student = {
                name:'老王',
                age:'30',
                dizhi:'隔壁',
                isMan:true,
                son:{name:'xiaowang',age:3},
                action:function(){
                    console.log('拐卖良家妇女')
                }
            }
            console.log(student)

            //想要获取里面的属性
//            student['属性值']
//            student.属性值
//          我们如果想要用变量的情况下,那么就要用中括号。

//            student.xuehao = 123456789
//            student['xuehao'] = 12432342
//            console.log(student)

        
            var student2 = new Object()
            student2.name = 'xxzz'
            student2.age = 16
            console.log(student2)
        </script>
    </body>
</html>

 

posted @ 2019-03-18 21:31  就这样子吧  阅读(156)  评论(0编辑  收藏  举报