Day17(作用域链,闭包,面向对象,构造函数,demo页面切换)

变量的作用域

var a=10; //如果写在window.onload里面,他就不能算全局变量,只能算局部内最高变量

想在函数外面访问局部变量,只有用闭包
也就是说,外部函数的变量,可以被内部函数调用,这叫做变量的作用域链
也就是说,我先在外部函数内部声明一个函数,接着,在外部函数里面返回内部函数

变量的作用域 :全局变量和局部变量
function fun1(){
            var a=10;//他是fun1的变量
            fun2()
            function fun2(){
                var b = 20;//他是fun2的变量
                console.log(a,b)//也就是说,外部函数的变量,可以被内部函数调用,这叫做变量的作用域链
            }
            
        }
function fun1(){
    var a = 10;
    function fun2(){
        console.log(a)
    }
    return fun2;
}

然后,我在外面调用fun1的时候,会把fun2这个函数体返回出来
返回的是一串文字:

function fun2(){
        console.log(a)
    }

接着,我把这一串文字,赋值给了一个变量;那么那个变量就变成这个函数了;

var demo = fun1();
demo();

接着,调用那个变量,就相当于执行了fun2

闭包

声明函数立马调用:

(function a(){}());  ===> function a(){};a();

闭包传参

function fun1(x){
            return function(y){
                console.log(x+y);
            }
        }
        var demo=fun1(40);
        demo(10);

循环里面采用闭包传参

var divs=document.getElementsByTagName('div');
    for(var i=0;i<divs.length;i++){ 
        (function(j){
            divs[j].onclick=function(){
                console.log(j);
            }
        }(i))
    }
什么是闭包

就是我们可以用一个函数去访问另一个函数内部的变量

优点:不会产生全局变量,实现属性私有化
缺点:闭包中的数据,会常驻内存,再不用的时候记得删掉,否则会导致内存溢出;

面向对象编程

什么是对象?
简单来讲,对象,就是有属性,有方法的东西,就叫做对象;

例如:

手机:
属性:宽高,颜色,重量;
方法:能上网,能打电话,能玩游戏。。。
手机.发送短信();
那么,手机就是一个对象

万事万物都是对象;

之前学过很多函数
数学函数:Math.round()。。。
时间函数:Date.getDay()….;
之前学过的函数,都是一个方法;
方法又是什么玩意儿?
方法就是函数,也就是工具;
例如,时间函数,他就是我们获取时间的一个工具;
Alert(‘s’);
Window.alert();

也就是说,我们整个JS都是一个面向对象的语言;

document.getElementById("btn1");
getElementById就是document的方法,
document就是一个对象
它有很多方法。。。。。

对象是什么?

是多个工具集合的一个工具包
由多个函数组成的对象;

知道什么是对象了:就是有属性,有方法的东西,就叫做对象;

那么,什么是面向对象??????

就是:把各种零零散散的方法,封装成一个对象,然后给别人去使用,就是面向对象;

面向对象开发:

架构师:一个产品对象,一个用户对象
用户对象:
属性:账号、密码。。。。
方法:购买、注册、登录
传一个空框架 →

中级程序员:
封装一个用户对象,login()登录方法;
把框架里面的东西完成;

初级程序员:

    <h1></h1>   h1.innerHTML=yonghu .zhanghao
    <button>购买</button>   btn.onclick=function(){
                            Login();
}
面向对象开发,第一件事,声明对象;
//声明一个对象

var obj=new Object();//实例化一个对象;
//但是,我们不推崇这个方式声明对象
一般,除非特殊情况,需要实例化一个对象,或者延迟加载数据,基本不需要用到new关键字,
因为在JS里面大量的new操作改变内存地址是一个很慢的操作,所以,通常为了效率起见,应该始终采用对象符号来声明对象;

var obj1={};//叫做字面量式声明对象
字面量式声明对象和json数组很像

其实,json数组就是对象的一个实例化;

为什么说面向对象虚无而又缥缈
他不是一个方法,也不是个属性,他是什么???
他是一种抽象的编程思路!!!!!!!!!
为什么要用面向对象编程?
人为什么现在这么发达?
因为人不断地进化!
人类的第一部里程碑式的进化,怎么来的?
由猴子进化成类人猿?
学会了使用工具,进入了石器时代
在外后面,学会了用火。。。。。。人类才进化到现在

编程,由当初的一片茫然,到现在的热火朝天
就是因为,我们学会了使用面向对象编程,学会了创建工具包给别人程序员用,
也学会了使用别人的工具包,节约了我们大量的时间;

JAVA里面,他们可以把一个对象,封装成class(类),或者public(包)
我们前端有什么?我们没有class,也没有public,但是我们更先进
我们一个函数,全部搞定

面向对象三大特征:

封装、继承、多态

封装,重复的封装起来,
继承,就是字面意思,子继承父
多态,面向不同的对象,展现不同的状态(例如网购支付);

//刚刚,我们讲了使用一个对象,那么很多个对象。就要用到封装

        function Person(name,age){
            var obj={};      //声明对象
            obj.name=name;     //通过传参传进来的name赋值给对象的name;
            obj.age=age;
            obj.showName=function(){
                alert('我叫:'+name);
            }
            obj.showAge=function(){
                alert('我今年'+age+'岁');
            }
            return obj;
            
            
        }
        
        var wzq=Person('嘿嘿',18);
        var xhh=Person('哈哈',19);
        console.log(wzq,xhh)
//      console.log(xhh.name)
//      xhh.showName();

        /*这就是封装,但是这只是函数封装,并不是对象封装*/

你从同一个函数生成的对象,相互之间没有任何联系
为了让他们其实是来自同一个对象,我们有我们的方法,也就是我们JS真正对象的封装:

构造函数

所谓的构造函数,其实就是普通函数,只不过内部使用了this变量,
对构造函数使用了new运算符,就能够生成实例,并且this变量会绑定在实例对象上面;

简单来说,构造函数就是 new 出来的函数。

demo 节流,闭包(页面切换)

什么是函数节流,
避免一些代码在很短的时间间隔内连续调用,影响页面性能。

<style>
        *{
            margin: 0;padding: 0;
        }
        #box{
            margin: 100px 200px;
        }
        ul{
            list-style: none;
        }
        li{
            float: left;
            width: 60px;
            height: 30px;
            line-height: 26px;
            text-align: center;
            border: 1px solid silver;
            cursor: pointer;
        }
        .bg{
            background: #efefef;
        }
        ul:after{
            content: "";
            display: table;
            clear: both;
        }
        .div div{
            width: 400px;
            height: 200px;
            border: 1px solid silver;
            display: none;
            background-color: #efefef;
        }
        .div .book{
            display: block;
        }

    </style>
<div id="box">
    <ul>
        <li class="bg">One</li>
        <li>Two</li>
        <li>Three</li>
        <li>four</li>
        <li>five</li>
    </ul>
    <div id="bom" class="div">
        <div class="book"></div>
        <div>第二:</div>
        <div>第三:</div>
        <div>第四:</div>
        <div>第五:</div>
    </div>
</div>
<script>
    window.onload= function(){
        
        function tab(obj){
            var target=document.getElementById(obj);
            var lis = document.getElementsByTagName("li");
            var divs = document.getElementById("bom").getElementsByTagName("div");

            for(var i = 0;i<lis.length ;i++){
                var timer = null;
                lis[i].onmouseover = function(num){
                    return function(){
                        clearTimeout(timer);
                        timer = setTimeout(function(){
                            for(var j = 0;j<lis.length;j++){
                                lis[j].className = "";
                                divs[j].className = "";
                            }
                            lis[num].className = "bg";
                            divs[num].className = "book";
                        },300)
                    }
                }(i);
                lis[i].onmouseout = function(){
                    clearTimeout(timer);
                }
            }
        }

        tab(box);

    }
</script>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容