13

作者: 冰鈊夢 | 来源:发表于2019-06-12 19:53 被阅读0次

变量作用域

变量作用域指的是变量的作用范围,javascript中的变量分为全局变量和局部变量。

1、全局变量:在函数之外定义的变量,为整个页面公用,函数内部外部都可以访问。

2、局部变量:在函数内部定义的变量,只能在定义该变量的函数内部访问,外部无法访问。

<script type="text/javascript">

    //全局变量

    var a = 12;

    function myalert()

    {

        //局部变量

        var b = 23;

        alert(a);

        alert(b);

    }

    myalert(); //弹出12和23

    alert(a);  //弹出12   

    alert(b);  //出错

</script>

封闭函数

封闭函数是javascript中匿名函数的另外一种写法,创建一个一开始就执行而不用命名的函数。

一般定义的函数和执行函数:

function changecolor(){

    var oDiv = document.getElementById('div1');

    oDiv.style.color = 'red';

}

changecolor();

封闭函数:

(function(){

    var oDiv = document.getElementById('div1');

    oDiv.style.color = 'red';

})();

还可以在函数定义前加上“~”和“!”等符号来定义匿名函数

!function(){

    var oDiv = document.getElementById('div1');

    oDiv.style.color = 'red';

}()

闭包

什么是闭包 

函数嵌套函数,内部函数可以引用外部函数的参数和变量,参数和变量不会被垃圾回收机制收回

function aaa(a){     

      var b = 5;     

      function bbb(){

          a++;

          b++;

        alert(a);

        alert(b);

      }

      return bbb;

  }

var ccc = aaa(2);

ccc();

ccc();

改写成封闭函数的形式:

var ccc = (function(a){

  var b = 5;

  function bbb(){

      a++;

      b++;

    alert(a);

    alert(b);

  }

  return bbb;

})(2);

ccc();

ccc();

用处 

1、将一个变量长期驻扎在内存当中,可用于循环中存索引值

<script type="text/javascript">

    window.onload = function(){

        var aLi = document.getElementsByTagName('li');

        for(var i=0;i<aLi.length;i++)

        {

            (function(i){

                aLi[i].onclick = function(){

                    alert(i);

                }

            })(i);

        }

    }

</script>

......

<ul>

    <li>111</li>

    <li>222</li>

    <li>333</li>

    <li>444</li>

    <li>555</li>

</ul>

2、私有变量计数器,外部无法访问,避免全局变量的污染

<script type="text/javascript">

var count = (function(){

    var a = 0;

    function add(){

        a++;

        return a;

    }

    return add;

})()

count();

count();

var nowcount = count();

alert(nowcount);

</script>

内置对象

1、document

document.referrer  //获取上一个跳转页面的地址(需要服务器环境)

2、location

window.location.href  //获取或者重定url地址

window.location.search //获取地址参数部分

window.location.hash //获取页面锚点或者叫哈希值

3、Math

Math.random 获取0-1的随机数

Math.floor 向下取整

Math.ceil 向上取整

4、其他

Array:

concat 返回一个由两个数组合并组成的新数组。

join  返回一个由数组中的所有元素连接在一起的 String 对象。

pop  删除数组中的最后一个元素并返回该值。

push 向数组中添加新元素,返回数组的新长度。

shift 删除数组中的第一个元素并返回该值。

unshift 返回一个数组,在该数组头部插入了指定的元素。

sort  返回一个元素被排序了的 Array 对象

reverse  返回一个元素反序的 Array 对象。

slice 返回数组的一个片段。

splice 从数组中删除元素

Date:

getYear() 返回年份(2位或4位)

getFullYear() 返回年份(4位)

getMonth() 返回月份  0-11

getDate() 返回日期 1-31

getDay() 返回星期数 0-6

getHours() 返回小时数 0-23

getMinutes() 返回分钟数 0-59

getSeconds() 返回秒数 0-59

getMilliseconds() 返回亳秒数0-999

创建对象的方法 

1、单体

<script type="text/javascript">

var Tom = {

    name : 'tom',

    age : 18,

    showname : function(){

        alert('我的名字叫'+this.name);   

    },

    showage : function(){

        alert('我今年'+this.age+'岁');   

    }

}

</script>

2、工厂模式

<script type="text/javascript">

function Person(name,age,job){

    var o = new Object();

    o.name = name;

    o.age = age;

    o.job = job;

    o.showname = function(){

        alert('我的名字叫'+this.name);   

    };

    o.showage = function(){

        alert('我今年'+this.age+'岁');   

    };

    o.showjob = function(){

        alert('我的工作是'+this.job);   

    };

    return o;

}

var tom = Person('tom',18,'程序员');

tom.showname();

</script>

2、构造函数

<script type="text/javascript">

    function Person(name,age,job){           

        this.name = name;

        this.age = age;

        this.job = job;

        this.showname = function(){

            alert('我的名字叫'+this.name);   

        };

        this.showage = function(){

            alert('我今年'+this.age+'岁');   

        };

        this.showjob = function(){

            alert('我的工作是'+this.job);   

        };

    }

    var tom = new Person('tom',18,'程序员');

    var jack = new Person('jack',19,'销售');

    alert(tom.showjob==jack.showjob);

</script>

3、原型模式

<script type="text/javascript">

    function Person(name,age,job){       

        this.name = name;

        this.age = age;

        this.job = job;

    }

    Person.prototype.showname = function(){

        alert('我的名字叫'+this.name);   

    };

    Person.prototype.showage = function(){

        alert('我今年'+this.age+'岁');   

    };

    Person.prototype.showjob = function(){

        alert('我的工作是'+this.job);   

    };

    var tom = new Person('tom',18,'程序员');

    var jack = new Person('jack',19,'销售');

    alert(tom.showjob==jack.showjob);

</script>

4、继承

<script type="text/javascript">

        function fclass(name,age){

            this.name = name;

            this.age = age;

        }

        fclass.prototype.showname = function(){

            alert(this.name);

        }

        fclass.prototype.showage = function(){

            alert(this.age);

        }

        function sclass(name,age,job)

        {

            fclass.call(this,name,age);

            this.job = job;

        }

        sclass.prototype = new fclass();

        sclass.prototype.showjob = function(){

            alert(this.job);

        }

        var tom = new sclass('tom',19,'全栈工程师');

        tom.showname();

        tom.showage();

        tom.showjob();

    </script>

(计算器)

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>jisuanji</title>

<script type="text/javascript">

window.onload = function(){

var one = document.getElementById('one');

var otow = document.getElementById('tow');

var ocount = document.getElementById('count');

var oBtn = document.getElementById('btn');

oBtn.onclick = function(){

var val01 = one.value;

var val02 = otow.value;

if(val01=="" || val02==""){

alert('输入框不能为空!');

return;

}

if(isNaN(val01) || isNaN(val02)){

alert('请输入数字!');

return;

}

switch(ocount.value){

case '0':

alert((parseFloat(val01)*100 + parseFloat(val02)*100)/100);

break;

case '1':

alert((parseFloat(val01)*100 - parseFloat(val02)*100)/100);

break;

case '2':

alert((parseFloat(val01)*100) * (parseFloat(val02)*100)/10000);

break;

case '3':

alert((parseFloat(val01)*100) / (parseFloat(val02)*100));

break;

}

}

}

</script>

</head>

<body>

<h1>计算器</h1>

<input type="text"id="one" />

<select id="count">

<option value="0">+</option>

<option value="1">-</option>

<option value="2">*</option>

<option value="3">/</option>

<lect>

<input type="text" id="tow" />

<input type="button" value="计算" id="btn" />

</body>

</html>

相关文章

网友评论

      本文标题:13

      本文链接:https://www.haomeiwen.com/subject/pzyrfctx.html