zoukankan      html  css  js  c++  java
  • python16_day13【css、js】

    一、部局

    1.pg-header(title)

    1       .pg-header{
    2             height: 48px;
    3             background-color: cadetblue;
    4             line-height: 48px;
    5             min- 1000px;
    6         }

    2.左则Logo

            .pg-header .logo{
                height: 44px;
                line-height: 44px; //居中
                padding: 2px;
                float: left;
            }

    3.头像

     1   .pg-header .avatar{
     2             height: 40px;
     3              40px;
     4             padding: 2px 10px 2px 0; float right;
     5         }
     6         .pg-header .avatar img{
     7             /*overflow: hidden; 下面有2个100%,不就需要,如果没有下2个100%,只能显示图片局部*/ 
     8             height: 100%;
     9              100%;
    10             border-radius: 50%;  /*变成圆的*/
    11         }

    4.头像上的用户信息

     1        .pg-header .avatar .user-menu{
     2             position: absolute;   /*avatar上面有relative*/
     3             border: 1px solid black;
     4              150px;
     5             top: 44px;
     6             right: 0px;
     7             display: none;
     8             z-index: 91;   /*bug,通过优先级解决*/
     9         }
    10         .pg-header .avatar .user-menu a{
    11             display: block;
    12             text-decoration: none;
    13         }
    14         .pg-header .avatar:hover .user-menu{
    15             display: block;  /*鼠标放到头像,显示菜单*/
    16         }

    5.莫泰对话框(登录)

     1           <a class="item"><input type="button" value="登录" onclick="showLogin();"/></a>
     2             <a class="item"><input type="button" value="注册" onclick="showRegister();"/></a>
     3             <div id="i1" class="mid hide"></div>
     4             <div id="i2" class="modal hide">
     5 
     6   
     7         /*CSS莫泰对话框*/
     8         .pg-header .mid{
     9             position: fixed;
    10             opacity: 0.5;
    11             z-index: 95;
    12             top: 0;
    13             bottom: 0;
    14             left: 0;
    15             right: 0;
    16             background-color: black;
    17         }
    18 
    19         .pg-header .modal{
    20             position: fixed;
    21             z-index: 96;
    22              400px;
    23             height: 300px;
    24             margin-left: -550px;
    25             background-color: darkgreen;
    26             top:50%;
    27             margin-top: -150px;
    28         }
    29 
    30 //JS
    31 function showLogin(){
    32     document.getElementById('i1').classList.remove('hide');
    33     document.getElementById('i2').classList.remove('hide');
    34 }
    35 function hideLogin(){
    36     document.getElementById('i1').classList.add('hide');
    37     document.getElementById('i2').classList.add('hide');
    38 }
    39 
    40 function showRegister(){
    41     document.getElementById('i1').classList.remove('hide');
    42     document.getElementById('i3').classList.remove('hide');
    43 }
    44 function hideRegister(){
    45     document.getElementById('i1').classList.add('hide');
    46     document.getElementById('i3').classList.add('hide');
    47 }

    6.菜单选择

    HTML:
               <div class="item">
                    <div class="title" onclick="changeMenu(this);">监控</div>
                    <div class="c1 hide">
                        <a href="#">内容一</a>
                        <a href="#">内容一</a>
                        <a href="#">内容一</a>
                    </div>
                </div>
    
            <div class="item">
                <div class="title" onclick="changeMenu(this);" id="m2">操作</div>
                <div class="c1 hide">
                     <a href="#">内容二</a>
                     <a href="#">内容二</a>
                     <a href="#">内容二</a>
                </div>
            </div>
    
            <div class="item">
                <div class="title" onclick="changeMenu(this);">日志</div>
                <div class="c1 hide">
                     <a href="#">内容三</a>
                     <a href="#">内容三</a>
                     <a href="#">内容三</a>
                </div>
    
    CSS:
    
            /*菜单选择*/
            .pg-body .menus .item .title{
                border: 1px solid green;
                height: 40px;
                background-color: darkslategray;
                line-height: 40px;
                text-align: center;
                border-radius: 10%;
                color: white;
            }
    
            .pg-body .c1 a{
                display: block;
                left: 0px;
                text-align: center;
                color: pink;
            }
    
    JS:
    //菜单选择
    function changeMenu(currentTagObj){
        var contentOjb= currentTagObj.nextElementSibling;
        contentOjb.classList.remove('hide')
    
        var item_list=document.getElementsByClassName('title');
    
        for(var i=0;i<item_list.length;i++){
            var loop = item_list[i]
            if(loop != currentTagObj){
                loop.nextElementSibling.classList.add('hide');
            }
        }
    }

     7.表单

     1            <div class="search">
     2                 <form action="http://www.sogou.com/web" method="get">
     3                     搜索:<input type="text" id="key" name="query" onfocus="keyFocus();" onblur="keyBlur();" placeholder="请输入关键字"/>
     4                     <input style="border: 0px" type="submit" value="提交">
     5                 </form>
     6             </div>
     7 
     8 JS:
     9 function keyFocus() {
    10     //console.log('获取焦点');
    11     var val = document.getElementById('key').value;
    12     if (val == "请输入关键字"){
    13         document.getElementById('key').value = "";
    14     }
    15 }
    16 
    17 function keyBlur() {
    18     //console.log('失去焦点');
    19     var val = document.getElementById('key').value;
    20     if(val.length>0){
    21 
    22     }else{
    23         document.getElementById('key').value = "请输入关键字";
    24     }
    25 
    26 }

    8.多选反选

     1                <input type="button" value="全选" onclick="checkAll();">
     2                 <input type="button" value="取消" onclick="removeAll();">
     3                 <input type="button" value="反选" onclick="reverseAll();">
     4 
     5                     <table border="1px">
     6                         <thead>
     7                             <tr>
     8                                 <th>选择</th>
     9                                 <th>主机</th>
    10                                 <th>端口</th>
    11                             </tr>
    12                         </thead>
    13                         <tbody id="tbody1">
    14                             <tr>
    15                                 <td><input class="option1" type="checkbox"/></td>
    16                                 <td>c1.com</td>
    17                                 <td>80</td>
    18                             </tr>
    19                             <tr>
    20                                 <td><input class="option1" type="checkbox"/></td>
    21                                 <td>c2.com</td>
    22                                 <td>80</td>
    23                             </tr>
    24                             <tr>
    25                                 <td><input class="option1" type="checkbox"/></td>
    26                                 <td>c3.com</td>
    27                                 <td>80</td>
    28                             </tr>
    29                         </tbody>
    30                     </table>
    31 
    32 
    33 JS:
    34 function checkAll(){
    35     var inpList = document.getElementsByClassName('option1');
    36     for(var i=0;i<inpList.length;i++){
    37         var inp = inpList[i];
    38         inp.checked=true;
    39     }
    40 }
    41 
    42 function removeAll(){
    43     var inpList = document.getElementsByClassName('option1');
    44     for(var i=0;i<inpList.length; i++){
    45         var inp = inpList[i];
    46         inp.checked=false;
    47     }
    48 }
    49 
    50 function reverseAll(){
    51     var inpList=document.getElementsByClassName('option1');
    52     for(var i=0;i<inpList.length; i++){
    53         var inp = inpList[i];
    54         if(inp.checked){
    55             inp.checked = false;
    56         }else {
    57             inp.checked = true;
    58         }
    59     }
    60 }

    9.点赞

     1 <div style="top:410px; position: fixed">
     2                 <div class="click_good">
     3                     <a onclick="Favor(this);" href="#">点赞1</a>
     4                 </div>
     5                 <div class="click_good">
     6                     <a onclick="Favor(this);" href="#">点赞2</a>
     7                 </div>
     8                 <div class="click_good">
     9                     <a onclick="Favor(this);" href="#">点赞3</a>
    10                 </div>
    11             </div>
    12 
    13 CSS:
    14         /*点赞*/
    15         .click_good{
    16             padding: 10px;
    17             position: relative;
    18         }
    19         .click_good a{
    20             text-decoration: none;
    21         }
    22         .click_good span{
    23             font-size: 18px;
    24             position: absolute;
    25             top:10px;
    26             left: 50px;
    27             opacity: 1;
    28         }
    29 
    30 JS:
    31 function Favor(ths){
    32     // ths ==> this表示当前触发事件的标签.
    33     var top = 10;
    34     var left = 50;
    35     var op =1 ;
    36     var fontSize =18;
    37     var tag = document.createElement('span');
    38     tag.innerText="+1"
    39     tag.style.position = 'obsolute';
    40     tag.style.top = top + 'px';
    41     tag.style.left = left + 'px';
    42     tag.style.opacity = op;
    43     tag.style.fontSize = fontSize + 'px';
    44     ths.parentElement.appendChild(tag);
    45 
    46     //处理span标签变大,透明,消失.
    47     var interval = setInterval(function(ths){
    48         top -= 10;
    49         left += 10;
    50         fontSize += 5;
    51         op -= 0.1;
    52 
    53         tag.style.top = top + 'px';
    54         tag.style.left = left + 'px';
    55         tag.style.opacity = op;
    56         tag.style.fontSize = fontSize + 'px';
    57 
    58         if(op <= 0.1){
    59             clearInterval(interval);
    60             ths.parentElement.removeChild(tag);
    61         }
    62     },50);
    63 }

     10.动态时间

     1 JS:
     2 function currentDate() {
     3     //new object
     4     var da = new Date();
     5 
     6     var year = da.getFullYear();
     7     //月份从0开始
     8     var month = da.getMonth()  + 1;
     9     var day = da.getDate();
    10 
    11     var hours = da.getHours();
    12     var minutes = da.getMinutes();
    13     var seconds = da.getSeconds();
    14 
    15     var txt = year + "-" + month + "-" + day + " " + hours+":"+minutes+":"+seconds;
    16 
    17     document.getElementById('h4').innerHTML = txt;
    18 }
    19 
    20 setInterval(currentDate,1000);

    11.滚动字体

    1 setInterval(function(){
    2     var txt = document.getElementById('welcome').innerText;
    3     var a = txt.charAt(0)
    4     var b = txt.substring(1, txt.length)
    5     var new_txt = b + a
    6     document.getElementById('welcome').innerText = new_txt;
    7 },1000)

    12.增加删除标签、删除成功

     1 function addElement() {
     2     // 获取用户输入的内容
     3     var host = document.getElementById('host_numb').value;
     4     var port = document.getElementById('host_port').value;
     5 
     6     // 创建标签(对象) *****
     7     var tag_tr = document.createElement('tr');
     8     var tag_td1 = document.createElement('td');
     9     var tag_td2 = document.createElement('td');
    10     var tag_td3 = document.createElement('td');
    11     var tag_input = document.createElement('input');
    12 
    13     tag_td2.innerHTML = host;
    14     tag_td3.innerHTML = port;
    15     tag_input.setAttribute("class","option1");
    16     tag_input.setAttribute("type","checkbox");
    17 
    18     tag_td1.appendChild(tag_input);
    19     tag_tr.appendChild(tag_td1);
    20     tag_tr.appendChild(tag_td2);
    21     tag_tr.appendChild(tag_td3);
    22 
    23     // 将对象添加到 append
    24     document.getElementById('tbody1').appendChild(tag_tr);
    25 
    26 
    27     document.getElementById('host_numb').value = "";
    28     document.getElementById('host_port').value = "";
    29 }
    30 
    31 function delElement(){
    32     var list = document.getElementById("tbody1");
    33     list.removeChild(list.lastElementChild);
    34 
    35     var temp = document.getElementById('display_delete');
    36     temp.setAttribute('style', 'color:red;');
    37     temp.innerHTML="删除成功";
    38     console.log(temp)
    39 
    40     setTimeout(function () {
    41         document.getElementById('display_delete').innerHTML = "";
    42     },3000);
    43 }

     HTML:table

     1                   <table border="1px">
     2                         <thead>
     3                             <tr>
     4                                 <th>选择</th>
     5                                 <th>主机</th>
     6                                 <th>端口</th>
     7                             </tr>
     8                         </thead>
     9                         <tbody id="tbody1">
    10                             <tr>
    11                                 <td><input class="option1" type="checkbox"/></td>
    12                                 <td>c1.com</td>
    13                                 <td>80</td>
    14                             </tr>
    15                             <tr>
    16                                 <td><input class="option1" type="checkbox"/></td>
    17                                 <td>c2.com</td>
    18                                 <td>80</td>
    19                             </tr>
    20                             <tr>
    21                                 <td><input class="option1" type="checkbox"/></td>
    22                                 <td>c3.com</td>
    23                                 <td>80</td>
    24                             </tr>
    25                         </tbody>
    26                     </table>

     二、JavaScripts

    1.如何编写

      JavaScript代码存在形式

    <!-- 方式一 -->
    <script type"text/javascript" src="JS文件"></script>
      
    <!-- 方式二 -->
    <script type"text/javascript">
        Js代码内容
    </script>
    

      JavaScript代码存放位置

      a.HTML的head中

      b.HTML的body代码块底部(推荐)

      总结:由于Html代码是从上到下执行,如果Head中的js代码耗时严重,就会导致用户长时间无法看到页面,如果放置在body代码块底部,

         那么即使js代码耗时严重,也不会影响用户看到页面效果,只是js实现特效慢而已。

    <script src="https://www.gstatic.com/og/_/js/k=og.og2.en_US.iF4jnkQuaf0.O/rt=j/t=zcms/m=def/exm=in,fot/d=1/ed=1/rs=AA2YrTv5-POC4Ks9GtGRdY2ywUWisqz7-Q"></script>
    <script>
        alert('123');
    </script>
    

    2.变量

      全局变量和局部变量

    <script type="text/javascript">
     
        // 全局变量
        name = 'seven';
     
        function func(){
            // 局部变量
            var age = 18;
     
            // 全局变量
            gender = "男"
        }
    </script>
    

      注释方式(注意:此注释仅在Script块中生效)

      a.//

      b./**/

    3.数据类型

    JavaScript 中的数据类型分为原始类型和对象类型:

    • 原始类型
      • 数字
      • 字符串
      • 布尔值
    • 对象类型
      • 数组
      • 字典
      • ...

       特别的,数字、布尔值、null、undefined、字符串是不可变。

    1 // null、undefined
    2 null是JavaScript语言的关键字,它表示一个特殊值,常用来描述“空值”。
    3 undefined是一个特殊值,表示变量未定义。
    null undefined

      (1)数字(Number)

      JavaScript中不区分整数值和浮点数值,JavaScript中所有数字均用浮点数值表示。

      转换:

    • parseInt(..)    将某值转换成数字,不成功则NaN
    • parseFloat(..) 将某值转换成浮点数,不成功则NaN

      特殊值:

    •  NaN,非数字。可使用 isNaN(num) 来判断。
    • Infinity,无穷大。可使用 isFinite(num) 来判断。

      更多数值计算:

     1 常量
     2 
     3 Math.E
     4 常量e,自然对数的底数。
     5 
     6 Math.LN10
     7 10的自然对数。
     8 
     9 Math.LN2
    10 2的自然对数。
    11 
    12 Math.LOG10E
    13 以10为底的e的对数。
    14 
    15 Math.LOG2E
    16 以2为底的e的对数。
    17 
    18 Math.PI
    19 常量figs/U03C0.gif。
    20 
    21 Math.SQRT1_2
    22 2的平方根除以1。
    23 
    24 Math.SQRT2
    25 2的平方根。
    26 
    27 静态函数
    28 
    29 Math.abs( )
    30 计算绝对值。
    31 
    32 Math.acos( )
    33 计算反余弦值。
    34 
    35 Math.asin( )
    36 计算反正弦值。
    37 
    38 Math.atan( )
    39 计算反正切值。
    40 
    41 Math.atan2( )
    42 计算从X轴到一个点的角度。
    43 
    44 Math.ceil( )
    45 对一个数上舍入。
    46 
    47 Math.cos( )
    48 计算余弦值。
    49 
    50 Math.exp( )
    51 计算e的指数。
    52 
    53 Math.floor( )
    54 对一个数下舍人。
    55 
    56 Math.log( )
    57 计算自然对数。
    58 
    59 Math.max( )
    60 返回两个数中较大的一个。
    61 
    62 Math.min( )
    63 返回两个数中较小的一个。
    64 
    65 Math.pow( )
    66 计算xy。
    67 
    68 Math.random( )
    69 计算一个随机数。
    70 
    71 Math.round( )
    72 舍入为最接近的整数。
    73 
    74 Math.sin( )
    75 计算正弦值。
    76 
    77 Math.sqrt( )
    78 计算平方根。
    79 
    80 Math.tan( )
    81 计算正切值。
    View Code

      (2)字符串(string)

      字符串是由字符组成的数组,但在JavaScript中字符串是不可变的:可以访问字符串任意位置的文本,但是JavaScript并未提供修改已知字符串内容的方法。

     1 obj.length                           长度
     2  
     3 obj.trim()                           移除空白
     4 obj.trimLeft()
     5 obj.trimRight)
     6 obj.charAt(n)                        返回字符串中的第n个字符
     7 obj.concat(value, ...)               拼接
     8 obj.indexOf(substring,start)         子序列位置
     9 obj.lastIndexOf(substring,start)     子序列位置
    10 obj.substring(from, to)              根据索引获取子序列
    11 obj.slice(start, end)                切片
    12 obj.toLowerCase()                    大写
    13 obj.toUpperCase()                    小写
    14 obj.split(delimiter, limit)          分割
    15 obj.search(regexp)                   从头开始匹配,返回匹配成功的第一个位置(g无效)
    16 obj.match(regexp)                    全局搜索,如果正则中有g表示找到全部,否则只找到第一个。
    17 obj.replace(regexp, replacement)     替换,正则中有g则替换所有,否则只替换第一个匹配项,
    18                                      $数字:匹配的第n个组内容;
    19                                      $&:当前匹配的内容;
    20                                      $`:位于匹配子串左侧的文本;
    21                                      $':位于匹配子串右侧的文本
    22                                      $$:直接量$符号

      (3)布尔值

      布尔类型仅包含真假,与Python不同的是其首字母小写。

    • ==      比较值相等
    • !=       不等于
    • ===   比较值和类型相等
    • !===  不等于
    • ||        或
    • &&      且

      (4)数组

      JavaScript中的数组类似于Python中的列表

     1 obj.length          数组的大小
     2  
     3 obj.push(ele)       尾部追加元素
     4 obj.pop()           尾部获取一个元素
     5 obj.unshift(ele)    头部插入元素
     6 obj.shift()         头部移除元素
     7 obj.splice(start, deleteCount, value, ...)  插入、删除或替换数组的元素
     8                     obj.splice(n,0,val) 指定位置插入元素
     9                     obj.splice(n,1,val) 指定位置替换元素
    10                     obj.splice(n,1)     指定位置删除元素
    11 obj.slice( )        切片
    12 obj.reverse( )      反转
    13 obj.join(sep)       将数组元素连接起来以构建一个字符串
    14 obj.concat(val,..)  连接数组
    15 obj.sort( )         对数组元素进行排序

      (5)其它

      序列化

    • JSON.stringify(obj)   序列化
    • JSON.parse(str)        反序列化

      转义

    • decodeURI( )                   URl中未转义的字符
    • decodeURIComponent( )   URI组件中的未转义字符
    • encodeURI( )                   URI中的转义字符
    • encodeURIComponent( )   转义URI组件中的字符
    • escape( )                         对字符串转义
    • unescape( )                     给转义字符串解码
    • URIError                         由URl的编码和解码方法抛出

      eval

      JavaScript中的eval是Python中eval和exec的合集,既可以编译代码也可以获取返回值。

    • eval() 
    • EvalError   执行字符串中的JavaScript代码

      正则表达式

      A.定义正则表达式

      • /.../  用于定义正则表达式
      • /.../g 表示全局匹配
      • /.../i 表示不区分大小写
      • /.../m 表示多行匹配
        JS正则匹配时本身就是支持多行,此处多行匹配只是影响正则表达式^和$,m模式也会使用^$来匹配换行的内容)
    1 var pattern = /^Javaw*/gm;
    2 var text = "JavaScript is more fun than 
    JavaEE or JavaBeans!";
    3 result = pattern.exec(text)
    4 result = pattern.exec(text)
    5 result = pattern.exec(text)

      注:定义正则表达式也可以  reg= new RegExp()

      B.匹配

        JavaScript中支持正则表达式,其主要提供了两个功能:

         <1>test(string)     检查字符串中是否和正则匹配

    1 n = 'uui99sdf'
    2 reg = /d+/
    3 reg.test(n)  ---> true
    4  
    5 # 只要正则在字符串中存在就匹配,如果想要开头和结尾匹配的话,就需要在正则前后加 ^和$

        <2>exec(string)    获取正则表达式匹配的内容,如果未匹配,值为null,否则,获取匹配成功的数组。

     1 获取正则表达式匹配的内容,如果未匹配,值为null,否则,获取匹配成功的数组。
     2  
     3 非全局模式
     4     获取匹配结果数组,注意:第一个元素是第一个匹配的结果,后面元素是正则子匹配(正则内容分组匹配)
     5     var pattern = /Javaw*/;
     6     var text = "JavaScript is more fun than Java or JavaBeans!";
     7     result = pattern.exec(text)
     8  
     9     var pattern = /(Java)w*/;
    10     var text = "JavaScript is more fun than Java or JavaBeans!";
    11     result = pattern.exec(text)
    12  
    13 全局模式
    14     需要反复调用exec方法,来一个一个获取结果,直到匹配获取结果为null表示获取完毕
    15     var pattern = /Javaw*/g;
    16     var text = "JavaScript is more fun than Java or JavaBeans!";
    17     result = pattern.exec(text)
    18  
    19     var pattern = /(Java)w*/g;
    20     var text = "JavaScript is more fun than Java or JavaBeans!";
    21     result = pattern.exec(text)
    View Code

        <3>字符串中相关方法

    1 obj.search(regexp)                   获取索引位置,搜索整个字符串,返回匹配成功的第一个位置(g模式无效)
    2 obj.match(regexp)                    获取匹配内容,搜索整个字符串,获取找到第一个匹配内容,如果正则是g模式找到全部
    3 obj.replace(regexp, replacement)     替换匹配替换,正则中有g则替换所有,否则只替换第一个匹配项,
    4                                         $数字:匹配的第n个组内容;
    5                                           $&:当前匹配的内容;
    6                                           $`:位于匹配子串左侧的文本;
    7                                           $':位于匹配子串右侧的文本
    8                                           $$:直接量$符号

      时间处理

      JavaScript中提供了时间相关的操作,时间操作中分为两种时间:

    • 时间统一时间
    • 本地时间(东8区)

      更多操作参见:http://www.shouce.ren/api/javascript/main.html

    4.语句和异常

      (1)JavaScript中支持两个中条件语句,分别是:if 和 switch

    1 if(条件){
    2  
    3     }else if(条件){
    4          
    5     }else{
    6  
    7     }
    if
     1 switch(name){
     2         case '1':
     3             age = 123;
     4             break;
     5         case '2':
     6             age = 456;
     7             break;
     8         default :
     9             age = 777;
    10     }
    switch

      (2)循环语句

    1 var names = ["alex", "tony", "rain"];
    2  
    3 for(var i=0;i<names.length;i++){
    4     console.log(i);
    5     console.log(names[i]);
    6 }
    方法一
    方法二
    1 while(条件){
    2     // break;
    3     // continue;
    4 }
    方法三

      (3)异常处理

     1 try {
     2     //这段代码从上往下运行,其中任何一个语句抛出异常该代码块就结束运行
     3 }
     4 catch (e) {
     5     // 如果try代码块中抛出了异常,catch代码块中的代码就会被执行。
     6     //e是一个局部变量,用来指向Error对象或者其他抛出的对象
     7 }
     8 finally {
     9      //无论try中代码是否有异常抛出(甚至是try代码块中有return语句),finally代码块中始终会被执行。
    10 }

      注:主动跑出异常 throw Error('xxxx')

    5.函数

     1 // 普通函数
     2     function func(arg){
     3         return true;
     4     }
     5           
     6 // 匿名函数
     7     var func = function(arg){
     8         return "tony";
     9     }
    10   
    11 // 自执行函数
    12     (function(arg){
    13         console.log(arg);
    14     })('123')

      注意:对于JavaScript中函数参数,实际参数的个数可能小于形式参数的个数,函数内的特殊值arguments中封装了所有实际参数。

    6.作用域

      JavaScript中每个函数都有自己的作用域,当出现函数嵌套时,就出现了作用域链。当内层函数使用变量时,会根据作用域链从内到外一层层的循环,

      如果不存在,则异常。

      切记:所有的作用域在创建函数且未执行时候就已经存在。

     1 function f2(){
     2     var arg= 111;
     3     function f3(){
     4         console.log(arg);
     5     }
     6      
     7     return f3;
     8 }
     9  
    10 ret = f2();
    11 ret();
    View Code
     1       function f2(){
     2             var arg= [11,22];
     3             function f3(){
     4                 console.log(arg);
     5             }
     6             arg = [44,55];
     7             return f3;
     8         }
     9 
    10         ret = f2();
    11         ret();
    View Code

      注:声明提前,在JavaScript引擎“预编译”时进行。

      更多:http://www.cnblogs.com/wupeiqi/p/5649402.html

      a.js没有块级作用域

      b.js是函数作用域

      c.js如果出现函数嵌套函数,则就会出现作用域链,从内逐步向外部找,找不到则报错。

      d.JavaScript的作用域在被执行之前已经创建

     1 xo = 'alex';
     2  
     3 function Func(){
     4     var xo = "seven";
     5     function inner(){
     6  
     7         console.log(xo);
     8     }
     9     return inner;
    10 }
    11  
    12 var ret = Func();
    13 ret();
    14 // 输出结果: seven
    示例一
     1 xo = 'alex';
     2  
     3 function Func(){
     4     var xo = "eirc";
     5     function inner(){
     6  
     7         console.log(xo);
     8     }
     9     xo = 'seven';
    10     return inner;
    11 }
    12  
    13 var ret = Func();
    14 ret();
    15 // 输出结果: seven
    示例二
     1 xo = 'alex';<br>
     2 function Bar(){
     3     console.log(xo);
     4 }
     5  
     6 function Func(){
     7     var xo = "seven";
     8      
     9     return Bar;
    10 }
    11  
    12 var ret = Func();
    13 ret();
    14 // 输出结果: alex
    示例三

      当执行【ret();】时,由于其代指的是inner函数,此函数的作用域链在执行之前已经被定义为:全局作用域 -> Func函数作用域 -> inner函数作用域,

      所以,在执行【ret();】时,会根据已经存在的作用域链去寻找变量

    7.闭包

      闭包是指可以包含自由(未绑定到特定对象)变量的代码块。

      「闭包」,是指拥有多个变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。

      闭包是个函数,而它「记住了周围发生了什么」。表现为由「一个函数」体中定义了「另个函数」

      由于作用域链只能从内向外找,默认外部无法获取函数内部变量。闭包,在外部获取函数内部的变量。

     1 function f2(){
     2     var arg= [11,22];
     3     function f3(){
     4         return arg;
     5     }
     6     return f3;
     7 }
     8  
     9 ret = f2();
    10 ret();
    闭包

    8.面向对象

     1 function Foo (name,age) {
     2     this.Name = name;
     3     this.Age = age;
     4     this.Func = function(arg){
     5         return this.Name + arg;
     6     }
     7 }
     8   
     9 var obj = new Foo('alex', 18);
    10 var ret = obj.Func("sb");
    11 console.log(ret);
    View Code

    对于上述代码需要注意:

    • Foo充当的构造函数
    • this代指对象
    • 创建对象时需要使用 new

    上述代码中每个对象中均保存了一个相同的Func函数,从而浪费内存。使用原型和可以解决该问题:

     1 function Foo (name,age) {
     2     this.Name = name;
     3     this.Age = age;
     4 }
     5 Foo.prototype = {
     6     GetInfo: function(){
     7         return this.Name + this.Age
     8     },
     9     Func : function(arg){
    10         return this.Name + arg;
    11     }
    12 }
  • 相关阅读:
    【bzoj1196】[HNOI2006]公路修建问题
    【bzoj1082】栅栏[SCOI2005]
    【bzoj1012】[JSOI2008]最大数maxnumber
    【bzoj2330】 [SCOI2011]糖果
    【bzoj1008】[HNOI2008]越狱
    【bzoj1002】 [FJOI2007]轮状病毒DP
    【bzoj1001】[BeiJing2006]狼抓兔子
    C++-POJ2234-Matches Game[Nim][SG函数]
    C++-POJ1067-取石子游戏
    lodash常用
  • 原文地址:https://www.cnblogs.com/weibiao/p/6733847.html
Copyright © 2011-2022 走看看