概念整理

  1. 1:编程中的“同步、异步”的理解

    同步:是指各语句执行结束的顺序与语句执行开始的顺序相同,做完一件事情才能做另一件事情

    异步:是指各语句执行结束的顺序与语句执行开始的顺序并不一定相同,做一件事情,不影响做其它事情

    2:event loop

    上图中,主线程运行的时候,产生堆(heap)和栈(stack),栈中的代码调用各种外部API,它们在"任务队列"中加入各种事件(click,load,done)。只要栈中的代码执行完毕,主线程就会去读取"任务队列",依次执行那些事件所对应的回调函数。执行栈中的代码(同步任务),总是在读取"任务队列"(异步任务)之前执行。

     1 (function() {
     2     console.log('this is the start');
     3     (function(){
     4         console.log('222');
     5     })();
     6     setTimeout(function cb() {
     7         console.log('this is a msg from call back');
     8     },1000);
     9 
    10     console.log('this is just a message');
    11     
    12     setTimeout(function cb1() {
    13         console.log('this is a msg from call back1');
    14     }, 0);
    15     console.log('this is the end');
    16 })();
    17 // "this is the start"
    18 // ”222“
    19 // "this is just a message"
    20 // "this is the end"
    21 // "this is a msg from call back1"
    22 // "this is a msg from call back"

    上面代码中的setTimeout方法是一个异步任务,意味着只有当前脚本的所有代码执行完,系统才会去读取"任务队列"。

    3:网站打不开的原因及解决方法:

    一、服务器/空间不稳定

    和你选择的服务器或空间有关,打个比方,网站好比一个球,放在了一个摇摇晃晃的托盘上,用户想看看这个球可是抓不住又看不清。这时如果把球放在一个稳固的托盘上,把球稳稳拖住,流失的用户自然大大减少。

     解决方案:

    找个稳定的服务器很重要,至于靠谱的云主机怎么选,无外乎几点:

    1、品牌(见仁见智,只是参考因素,不是选择标准),如果你真的没有这方面的经验,可以选择品牌有保证的

    2、性价比,这个是最重要的,因为贵的不一定是好的,便宜的也不一定差。综合来说还是要看值不值

    以上两点是选择的门槛,选择后可以还需要判断这家的产品稳定性、访问速度等方面的性能如何,需要结合实际情况作判定

    推荐商家:

    阿里云:品牌大,技术值得认可,但用户量很多,服务跟不上,同时价格有些贵

    推荐指数:★★★★☆

    小鸟云:新品牌,同样值得信赖,国内来说性价比很高

    推荐指数:★★★★☆

    华为云:主流服务商,“上不碰应用,下不碰数据”,客户服务也很好

    推荐指数:★★★★☆

  2. 二、访问IP受限

    IP被拒绝访问,或者用户与网站之间的通信异常

    (注:这种情况只是其中一种,正常需要先判断网站是不是被攻击了,高峰期还是带宽不足等等情况导致的)

    解决方案:

    1、IP被限制了:换个ip访问;或者使用代理服务器伪装访问

    2、通信异常:重启电脑,或者路由设备

  3. 三、本地DNS缓存

    还有一种情况是由于域名重新解析后,本机访问域名还是指向原来的IP,这主要是因为本地DNS缓存导致的

    解决方案:

    更新DNS!可以选择电脑自动更新,需要时间,如果是有需求的可以手动清空缓存

    具体步骤:

    1、开始-运行-cmd

    2、运行:ipconfig /displaydns,查看下本机已缓存的dns信息

    3、运行:ipconfig /flushdns,清空DNS缓存

    4:主流浏览器内核及CSS3中一些私有属性的css前缀

    现代浏览器的内核,主流内容主要有Mozilla(Firefox浏览器)、WebKit(熟悉的有Safari、Chrome等浏览器)、Opera(Opera浏览器)、Trident(IE浏览器)。

    根据不同的内核,一些私有属性的css前缀不一样 

    WebKit内核   css前缀 -webkit-  

    Mozilla内核   css前缀 -moz-

    Trident内核   css前缀 -ms- 

    Opera 内核   css前缀 -o- 

    5:定义函数方法

    1:函数声明

    1 function functionName(arg0, arg1, arg2) { 
    2     //   函数体
    3 }

    函数声明的一个重要作用就是函数声明提升,意思是在执行代码之前会想读取函数声明。这意味着可以把函数声明放在调用它的语句后面。

    1 sayHi();
    2 function sayHi(){
    3     alert("Hi!");
    4 }

    这例子不会报错,因为在代码执行之前会先读取函数声明。

    2:函数表达式(第二种创建函数的方式),最常见的一种形式如下

    var functionName = function(arg0, arg1, arg2){ 
        //函数体   
    };

    函数表达式与其他表达式一样,在使用前必须先赋值,否则报错:

    1 sayHi(); //错误,函数还不存在
    2 var sayHi = function(){
    3      alert("Hi!");
    4 };

    note:如下情况时要选用第二种。

    1 //不要这样做
    2 if(condition){
    3     function sayHi(){
    4         alert("Hi!");
    5     }
    6 } else {
    7     function sayHi(){
    8         alert("Yo!");
    9     } 
    }
     1 //可以这样做      
     2 var sayHi;
     3     if(condition){
     4         sayHi = function(){
     5             alert("Hi!");
     6         };
     7     } else {
     8         sayHi = function(){
     9             alert("Yo!");
    10     };
    11 }

    6:深拷贝与浅复制

    1 //浅复制
    2 function extendCopy(p){
    3     var c = {};
    4     for(var i in p){
    5         c[i] = p[i]; 
    6     }
    7     c.uber = p ;
    8     return c ;
    9 }
     1 //深拷贝
     2 function deepCopy(p,c){
     3     var c = c || {};
     4     for(var i in p){
     5         if(typeof p[i] === 'object'){
     6             c[i] = (p[i].constructor === Array)? []:{};
     7             deepCopy(p[i],c[i]);
     8         }else{
     9             c[i]=p[i];
    10         }
    11     }
    12     return c;
    13 }

     7立即执行函数

     1 (function(a){
     2     console.log(a);   //firebug输出123,使用()运算符
     3 })(123);
     4 
     5 (function(a){
     6     console.log(a);   //firebug输出1234,使用()运算符
     7 }(1234));
     8 
     9 function sayhi(m){console.log(m)}("hi");      //不会执行
    10 !function sayhi(m){console.log(m)}("hi");    //立即执行,输出hi
    11 +function sayhi(m){console.log(m)}("hi");    //立即执行,输出hi
    12 ~function sayhi(m){console.log(m)}("hi");    //立即执行,输出hi
    13 var s=function sayhi(m){console.log(m)}('hi');//立即执行,输出hi

    前面两种( function(){…} )()和( function (){…} () )是立即执行函数的常用写法;第九行是个匿名函数,并不会立即执行,因为js将其当成是函数定义;其后三个前面分别加了一些符号,js就会将其解析成表达式,就会立即执行。第四个是真正意义上的函数表达式,所以,会立即执行,输出结果。

     8获取UA

    1 function whatBrowser(){
    2     document.Browser.Name.value=navigator.appName;
    3     document.Browser.Version.value=navigator.appVersion;
    4     document.Browser.Code.value=navigator.appCodeName;
    5     document.Browser.Agent.value=navigator.userAgent;
    6 }

    9样式优先级

    !important > 行内style > id > class > tag   (在同级样式按照申明的顺序后出现的具有更高的优先级)

     10:Promise的实现

     1 function getNumber(){
     2     var p = new Promise(function(resolve,reject){
     3         //做一些异步操作
     4         setTimeout(function(){
     5             var num = Math.ceil(Math.random()*10);//生成一个1-10的随机数
     6             if(num<=5){
     7                 resolve(num);
     8             }else{
     9                 reject("数字太大了");
    10             }
    11         },2000);
    12     });
    13     return p;
    14 }
    15 getNumber()
    16 .then(function(data){
    17     console.log("resolved");
    18     console.log(data);
    19     console.log(somedata);//此处的somedata未定义
    20 })
    21 .catch(function(reason){
    22     console.log("rejected");
    23     console.log(reason);
    24 })

    11:dom事件

    HTML事件:

    <input type="button" value="Click Me" onclick="alert(&quot;Clicked&quot;)" />

    在HTML中定义事件的处理程序可以包含要执行的具体操作,也可以调用在页面其他地方的脚本,如下

        <script type="text/javascript">

            function showMessage(){

                alert("Hello world!");

            }

        </script>

        <input type="button" value="Click Me" onclick="showMessage()" />

     

    DOM0级事件处理方式:

    <p id="ppp">我们都是好孩子</p>

    document.getElementById("ppp").onclick=function(){
    alert(1);
    }
    document.getElementById("ppp").onclick=function(){
    alert(2);
    }

    最后只弹出2,后1个把前面覆盖

     

    DOM2级事件处理方式(可添加多个事件处理程序,而且可以是同一事件类型,不同效果叠加,先后执行):

    document.getElementById("ppp").addEventListener("click",function(){
    alert(1);
    })

    document.getElementById("ppp").addEventListener("click",function(){
    alert(2);
    })

    不仅不会覆盖,点击后先后弹出1和2 

    12:HTTP请求方法

    根据HTTP标准,HTTP请求可以使用多种请求方法。

    HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。

    HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

    序号方法描述
    1 GET 请求指定的页面信息,并返回实体主体。
    2 HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
    3 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
    4 PUT 从客户端向服务器传送的数据取代指定的文档的内容。
    5 DELETE 请求服务器删除指定的页面。
    6 CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
    7 OPTIONS  允许客户端查看服务器的性能。
    8 TRACE 回显服务器收到的请求,主要用于测试或诊断。
posted @ 2017-04-12 13:51  Hale.Proh  阅读(177)  评论(0编辑  收藏  举报