javascript--函数

16 篇文章 0 订阅

目录

什么是函数

预定义函数

 isNaN()函数

isFinite()

 URL和URI之间的主要区别

 JavaScript decodeURI() 函数

函数定义

函数调用

匿名函数.

 自我执行函数

带参数的函数

预编译

使用document制作简易计算器

初识Dom

构造函数



函数特点:封装代码,代码的重用性强!

什么是函数

在程序设计中,可以将一段经常使用的代码“封装”起来,在需要时直接调用,这种“封装”就是函数。
  函数:为完成某一功能的程序指令(语句)的集合。
  执行特定任务的语句块

预定义函数

在js中,函数分为两种: 自定义函数、系统函数(内置函数)
系统函数里还包括预定义函数。
预定义函数是指不属于任何对象,他们的使用也不需要通过任何对象来应用。全局的函数
1.
eval()    将字符串数字转换成数字,可进行直接执行js代码
2.isNaN()     用来计算一个参数以确定它是否为非数字

ES6:
isNaN() 函数用于检查其参数是否是非数字值。
如果参数值为 NaN 或字符串、对象、undefined等非数字值则返回 true, 否则返回 false。

isNaN本意是通过Number方法把参数转换成数字类型,如若转换成功,则返回false,反之返回true,它只是判断参数是否能转成数字,不能用来判断是否严格等于NaN。,如果要判断某个值是否严格等于NaN不能用这个方法
ES6提供了Number.isNaN方法用来判断一个值是否严格等于NaN,它会首先判断传入的值是否为数字类型,如不是,直接返回false。
区别:
isNaN方法首先转换类型,而Number.isNaN方法不用;
isNaN不能用来判断是否严格等于NaN,Number.isNaN方法可用

3.parseInt()/parseFloat()   将数字字符串转化为一个数值
4.isFinite()    用来确定参数是否是一个有限数值.也就是说,如果该参数为非数字NaN,正无穷数,或负无穷数,则返回false,否则返回true;如果是字符串类型的数字,将会自动关转化为数字型.
5.
escape函数/unescape()    将字符串进行编码和解码​,这样就可以在所有的计算机上读取该字符串。
返回值:已编码的 string 的副本。其中某些字符被替换成了十六进制的转义序列

 isNaN()函数

<script>
    //isNaN(参数) 判断参数是否是NaN,如果是,返回true,否则返回false
    console.log(isNaN(NaN));//true
    console.log(isNaN("abc"));//false   类型转换
    

    console.log(Number.isNaN(NaN));//true
    console.log(Number.isNaN("abc"));//false
    console.log(Number.isNaN(123));//false
    var a = 123 + undefined;
    console.log(Number.isNaN(a));//true
    console.log(Number.isNaN(123 + null));//false
    console.log(Number.isNaN("abc" + 123));//false
    console.log(Number.isNaN("abc" - 123));//true
      
    isNaN(参数)  全局方法  会进行类型转换 再判断是否是NaN
    (1).参数是NaN,会返回true
    (2).参数进行类型转换,转数字失败也会得到NaN,也会返回true

    Number.isNaN(参数)  不会进行类型转换  只有参数是NaN才返回true ,否则返回false
</script>

isFinite()

 <script>
    console.log(isFinite(123));//true
    console.log(isFinite('123'));//true
    console.log(isFinite('123a'));//true
    console.log(isFinite(true));//NaN    false
    console.log(isFinite(1 / 3));//true
    console.log(isFinite(1 / 0));//false
    console.log(isFinite(-1 / 0));//false
    // isFinite(参数) 判断参数是否是一个有限数值  如果是有限数值,返回true,否则返回    false(NaN,Infinity,-Infinity,..)
    //会进行类型转换

    // Number.isFinite(参数) 判断参数是否是一个有限数值
    //不会进行类型转换

    // encodeURI(参数)  参数:字符串
    // 把字符串转义为计算机编码

    console.log(encodeURI('welcome中国'));
    document.write(decodeURI('welcome%E4%B8%AD%E5%9B%BD'));

    // decodeURI(参数)  参数:字符串
    //解码.
</script>

 URL和URI之间的主要区别

URL是统一资源定位器,用于标识资源;URI(统一资源标识符)提供了更简单和可扩展的标识资源的方法。URL是URI的子集,下面我们就来看看一下URL和URI的主要区别是什么。

        1、作用的区别

        URL(统一资源定位符)主要用于链接网页,网页组件或网页上的程序,借助访问方法  (http,ftp,mailto等协议)来检索位置资源。

URI(统一资源标识符)用于定义项目的标识,此处单词标识符表示无论使用的方法是什么(URL或URN),都要将一个资源与其他资源区分开来。

        2、可以说URL是URI(URL是URI的子集),但URI永远不能是URL。

        3、协议区别

        URL指定要使用的协议类型,而URI不涉及协议规范。

 JavaScript decodeURI() 函数

函数定义

函数调用

函数定义好后,不能自动执行,需要调用它,直接在需要的位置写函数名。
定义函数方法:
1. 第一种情况,在<script>标签内调用
       function 函数名(){
        函数体;
        }
函数名();//函数调用,直接写函数名

2.在HTML文件中调用,例如通过点击按钮后用定义好的函数
       如:<input type=“button” value=“click” οnclick=“add() ”/>

<body>
    <button onclick="sayHello()">按钮</button>
</body>
<script>
    var count = 0;
    function sayHello() {
        count = count + 1;
        alert("hello world" + count);
    }
    //调用函数
    sayHello();
    一个函数定义好了后,不会自动执行,需要调用
    驼峰试命名法
    定义函数
    function 函数名(){
        函数体
    }
</script>

匿名函数.

没有名字的函数就是匿名函数

<script>
    // function box(){}
    //    box()
    //匿名函数
     var box = function(){
        alert("Hello world")
    }
    // console.log(box);
    box();
</script>

 自我执行函数

<script>
// IIFE()  立即执行调用表达式
    // 自我执行函数
    (function(){
        alert("hello");
    })();   //把function用括号括起来,用最后面的括号引用
    +function(){
        alert("hello");
    }();   //把function用+号括起来,用最后面的括号引用
    -function(){
        alert("hello");
    }();   //把function用-号括起来,用最后面的括号引用
    ~function(){
        alert("hello");
    }();   //把function用~号引起来,用最后面的括号引用
    !function(){
        alert("hello");
    }();   //把function用~号引起来,用最后面的括号引用
</script>

带参数的函数

<script>
    //定义函数
    function zhazhi(a){  //形参
        alert(a+"汁");  //"苹果" + "汁"
    }
    // 调用函数
    zhazhi("苹果");  //实参
    zhazhi("桃子");  //实参
</script>
<script>
    //定义函数
    function zhazhi(a,b){  //形参
        alert(a+b+"汁");  //"苹果" + "汁"
    }
    // 调用函数
    zhazhi("苹果","葡萄");  //实参
    zhazhi("桃子","橘子");  //实参
</script>

 <script>
    //复用高
    //求2个数的和
    function add(x,y){
        return x+y;
    }
    //调用函数
    var sum=add(96,5)
    console.log(sum);
    document.write(add(53,53))
</script>

应用

   <script> 
    复用高
    求2个数的和
    function add(x,y){
        return x+y;
    }
    //调用函数
    var sum=add(96,5)
    console.log(sum);
    document.write(add(53,53))

function fun(a,b,c){
     console.log(arguments);  //参数对象
     console.log(arguments.length); //实参个数

    console.log(arguments.callee); //函数本身
    arguments.callee();
    fun(); //递归 函数自己调用自己
}
//fun(1,2)


function jieceng(n){
    if(n<=1){
        return 1;  //跳转函数 终止函数  找出口
    }
    //return n* jieceng(n-1);
    return n*arguments.callee(n-1);
     //5*4*3*2*1
}
//console.log(jieceng(5))  5的阶层
console.log(jieceng(10))  //10的阶层
</script>

预编译

// 预编译:代码解释之前

    // 全局预编译

    // 第一步创建GO对象(global object)

    // 第二步找变量声明,将变量声明作为GO对象的属性值传进去,赋值为undefined.

    // 第三部找函数声明(不要找函数表达式),赋值于对应的Go属性值

    // var a=10;

    // var c="hello";  var 声明提前,值不提前

    // function b(){   //声名提前  

    //     b();

    //     //伪代码

    //     GO{

    //         a:undefined;

    //         c:undefined;

    //     }

    // }

    //作用域:变量起作用的范围

    //1.全局作用域

    //2.局部作用域(函数作用域)

   //局部预编译

    //1.创建Ao (Active object)对象

    //2.找函数的形参和变量声明,将变量声明和形参作为Ao属性名,值为undefined,

    //3.将实参值和形参统一

    // 4.在函数体里面找函数声明(只找函数声明,不找函数表达式),值赋予函数体

    // function box(a,b){

    //     console.log(a,b);

    //     var c=100;

    //     function d(){}

    // }

    // box(1,2)

    //伪代码

    // AO{

    //     a:1

    //     b:2

    //     c:undefined

    //     d:undefined d(){}

    // }

使用document制作简易计算器

方法一

<body>
    第一个数:<input type="text" id="num1" value=""><br>
    第二个数:<input type="text" id="num2" value=""><br>
    &emsp;&emsp;&emsp;&emsp;&emsp;<button onclick="fun()">+</button>
    <button onclick="fun2()">-</button>
    <button onclick="fun3()">*</button>
    <button onclick="fun4()">/</button><br>
    &emsp;&emsp;结果:<input type="text" id="sum" value="">
</body>
<script>
    var ipt1 = document.getElementById("num1");
    var ipt2 =document.getElementById("num2");
    var ipt3 = document.getElementById("sum");
    function fun(){
        ipt3.value = Number(ipt1.value) + Number(ipt2.value)
    }
    function fun2(){
        ipt3.value = Number(ipt1.value) - Number(ipt2.value)
    }
    function fun3(){
        ipt3.value = Number(ipt1.value) * Number(ipt2.value)
    }
    function fun4(){
        ipt3.value = Number(ipt1.value) / Number(ipt2.value)
    }
</script>

方法二

<body>
    第一个数:<input type="text" id="num1" value=""><br>
    第二个数:<input type="text" id="num2" value=""><br>
    &emsp;&emsp;&emsp;&emsp;&emsp;<button onclick="calc('+')">+</button>
    <button onclick="calc('-')">-</button>
    <button onclick="calc('*')">*</button>
    <button onclick="calc('/')">/</button><br>
    &emsp;&emsp;结果:<input type="text" id="sum" value="">
</body>
<script>
    var ipt1 = document.getElementById("num1");  //标签对象 input
    var ipt2 =document.getElementById("num2");
    var ipt3 = document.getElementById("sum");
    function calc(fh){
        var n1 =+ipt1.value  //第一个input里的输入值
        var n2 =+ipt2.value
        if(fh==="+"){
          ipt3.value =  n1 + n1;
        }else if(fh==="-"){
            ipt3.value =  n1 - n1;
        }else if(fh==="*"){
            ipt3.value =  n1 * n1;
        }else if(fh==="/"){
            ipt3.value =  n1 / n1;
        }
    }

    可以通过 .value 来获取值的标签
    input
    textarea
    selsct
</script>

使用select下拉选择框实现简易计算器

<body>
    <input type="text" id="num1" value="">
    <select name="select" id="select">
        <option value="+" >+</option>
        <option value="-">-</option>
        <option value="*">*</option>
        <option value="/">/</option>
    </select>
    <input type="text" id="num2" value="">
    <button id="btn" onclick="fun()">=</button>
    <input type="text" id="sum" value="">
</body>
<script>
    var ipt1 = document.getElementById("num1");
    var ipt2 = document.getElementById("num2");
    var ipt3 = document.getElementById("sum");
    var sel = document.getElementById("select");
      function fun(){
        if(sel.value==="+"){
            ipt3.value=Number(ipt1.value) + Number(ipt2.value);
        }else if(sel.value==="-"){
            ipt3.value=Number(ipt1.value) - Number(ipt2.value);
        }else if(sel.value==="*"){
            ipt3.value=Number(ipt1.value) * Number(ipt2.value);
        }else if(sel.value==="/"){
            ipt3.value=Number(ipt1.value) / Number(ipt2.value);
        }
    }

    //第二种方法封装函数  了解即可 
        // var oInput1 = document.getElementById( "num1" );
         var oInput1 = getEl( "num1");
         // var oInput2 = document.getElementById( "num2" );
         var oInput2 = getEl("num2");
         //var oInput3 = document.getElementById("res");
         var oInput3 = getEl("res" );
         //var osel = document.getElementById( "symbol");
         var osel = getEl( "symbol");
         // var oBtn = document.getElementById("cal");
         var oBtn = getEl( "cal");
         function getE1(id){    //封装函数
         return document.getElementById(id)
         }


        实现计算器方法二:body是一样的,只不过去掉btn的onclick;js代码
    var ipt1 = document.getElementById("num1");
    var ipt2 = document.getElementById("num2");
    var ipt3 = document.getElementById("sum");
    var sel = document.getElementById("select");
    var oBtn = document.getElementById("btn")
    

    oBtn.onclick= function(){
        var v1 = +ipt1.value;
        var v2 = +ipt2.value;
        console.log(v1);
        if(isNaN(v1)||isNaN(v2)){
            alert("请输入正确的数字")
            return
        }
        var fh = sel.value;
        switch (fh){
            case "+":
                ipt3.value = v1 + v2;
                break;
                case "-":
                ipt3.value = v1 - v2;
                break;
                case "*":
                ipt3.value = v1 * v2;
                break;
                case "/":
                ipt3.value = v1 / v2;
                break;

            }
        }
</script>

初识Dom

document.write(参数):把参数写到文档内部

document.getElementByid(id值) :通过id值来获取元素对象

dom对象.value【值】:获取/设置表单里元素的值

dom对象.innerText【=内容】:获取/设置元素内部的文本(纯文本)

dom对象.innerHTML【=内容】:获取/设置元素内部的文本(可以识别标签)

dom对象.id【=id值】:获取/设置元素的id

dom对象.className【=值】:操作元素类

<body>
    <!-- <button id="btn" onclick="func()">按钮</button> -->
    <!-- <button id="btn">按钮</button> -->
    <input type="text" id="num1" value="1">
    <button onclick="fun()">按钮</button>
</body>
<script>
    var ipt = document.getElementById("num1") //获取input元素对象
    function fun(){
        alert(ipt.value);  //通过input对象.value 可以获取input输入框值
    }


//    var b= document.getElementById("btn")
    //console.log(b)
    // alert(b)

    // document.getElementById()
    // document 文档对象
    // get 获取
    // Element 元素(标签)
    // Id
</script>

简易计算器

<body>
    第一个数:<input type="text" id="num1" value=""><br>
    第二个数:<input type="text" id="num2" value=""><br>
    &emsp;&emsp;&emsp;&emsp;&emsp;<button onclick="calc('+')">+</button>
    <button onclick="calc('-')">-</button>
    <button onclick="calc('*')">*</button>
    <button onclick="calc('/')">/</button><br>
    &emsp;&emsp;结果:<input type="text" id="sum" value="">
</body>
<script>
    var ipt1 = document.getElementById("num1");  //标签对象 input
    var ipt2 =document.getElementById("num2");
    var ipt3 = document.getElementById("sum");
    function calc(fh){
        var n1 =+ipt1.value  //第一个input里的输入值
        var n2 =+ipt2.value
        if(fh==="+"){
          ipt3.value =  n1 + n1;
        }else if(fh==="-"){
            ipt3.value =  n1 - n1;
        }else if(fh==="*"){
            ipt3.value =  n1 * n1;
        }else if(fh==="/"){
            ipt3.value =  n1 / n1;
        }
    }

    // 可以通过 .value 来获取值的标签
    // input
    // textarea
    // select

dom元素内容获取

<body>    
    <!-- <button id="btn" onclick="fun()">按钮</button> -->
    <button id="btn" >按钮</button>
    <div id="box">中国</div>
</body>
<script>
    // function fun(){ }
    var oDiv = document.getElementById("box")
    var obtn = document.getElementById("btn");  //命名1
    // var _btn = document.getElementById("btn");  //命名2
    //给button按钮添加onclick事件

    // obtn.onclick =fun; //写法1
    // function fun(){
    //     alert(123)
    // }

    // obtn.onclick = function fun(){  //写法2
    //     alert(123)
    // }
    obtn.onclick= function(){
        // console.log(oDiv.innerText); //用来获取元素内部的纯文本
        // console.log(oDiv.innerHTML); //获取元素的内部内容

        // oDiv.innerText = "hello world";
        oDiv.innerHTML = "<a href='#''>hello world</a>"; //识别标签
    }

        //obtn=== object button
</script>

obtn替换类名

<body>
    <button id="btn" class="continer">开始</button>
</body>
<script>
    var obtn = document.getElementById("btn");
    // obtn.onclick = function(){
    //     // alert(obtn.innerText);
    //     if(obtn.innerText==="开始"){
    //         obtn.innerText="停止";
    //     }else{
    //         obtn.innerText="开始";
    //     }
    // }


    var count=0;   //写法2
    obtn.onclick = function(){
        count++;
        if(count %2===1){
            obtn.innerText="停止";
            obtn.className="green";
        }else{
            obtn.innerText="开始";
            obtn.className="red";
        }
    }

    // var count=0;
    // obtn.onclick=function(){
    //     // alert(obtn.className); //获取button上的类名
    //     obtn.className="red"
    // }

构造函数

new操作符具体干了什么事:
1.创建─个空的简单Javascript对象(即0);
2.为步骤1新创建的对象添加属性__proto__,将该属性链接至构造函数的原型对象;

3.将步骤1新创建的对象作为this的上下文;
4.如果该函数没有返回对象,则返回this

定义:function 函数名(形参,...){

this.属性名 = 值;

}

注意,函数名首字母一般大写

调用

var 变量= new 函数名(实参,..);

this指向:1.this指向函数的调用者2.在构造函数里,this指向new出来的实例对象

<script>
    // function box(){

    // }
    // box();  //普通函数
    // var b= new box();//构造函数

    // function Box(){ } //类
        
    // var b=new Box();  //实例化对象

    // console.log(b);
    //new 操作符 做了什么?
    // 1.创建一个空对象
    // 2.把构造函数里的this强制指向空对象
    // 3.把this作为返回值返回

    //我要通过这个animal构造函数 创建小动物类
    function animal(x,y){
        this.name = x ;
        this.gender = y;
    }
    var dog = new animal("狗蛋","公"); //实例化对象
    // var cat = new animal("猫蛋","母");

    console.log(dog instanceof animal); //检测某个实例是否从属于某个类
    // 实例 instanceof 类

    // console.log(dog);
    // console.log(cat);

    // 对象是由属性与方法构成的集合
</script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值