js-day04

137 阅读6分钟

function函数

把一段公共代码进行封装,把封装的这个代码块称之为函数(工具、就是一个方法---功能)

数据类型
  属于引用数据类型范畴
 自身类型:function

语法

  function 名称(){
     需要封装的代码
  }
  名称() 

说明

  • function属于系统关键字,就是函数的意思
  • function关键字后面的名称就是函数的名称,命名规则遵循变量的命名规则
  • 花括号里面写的就是业务代码(根据具体的需求来,自定义,里面放什么代码其实函数没有限定)
  • 不带系统关键字的这个函数名称表示的是函数的调用(函数你不调用它,那么它不会执行)

特点

  • 一次定义,多次调用
  • 减少代码量,方便代码的管理

规则

  • 定义在函数内部的变量,函数的外部是使用不了的
  • 可以保护私有变量
 function aFn(){
            // 私有变量
            var num = 10
            console.log(num)
        }
        aFn()
       
        function bFn(){
            // 私有变量
            var num = 20
            console.log(num)
        }
        bFn()

        var str = '我是函数外部的变量'
        console.log(str)
        var str = 'hello'
        console.log(str)

参数

  • 函数的小括号里面是可以传递参数的
  • 形参,形式上的参数,起了一个占位的作用,其实就是一个变量,只不过不需要使用var关键字进行声明
  • 实参,就是实际上你要使用的数据
  • 函数的形参和实参是一个映射(一一对应)关系
  • 如果形参相同的话,后面传递的实参的值会把前面的给覆盖掉

设置参数的默认值

  • ES6(就是js的版本)里面新增函数参数可以设置默认值

注意:如果形参相同的话,后面传递的实参的值会把前面的给覆盖掉

求两个数的最大值

问题:重复的代码太多了,不利于二次使用。写在函数外面的变量,后面如果有和前面相同的变量的情况下会被覆盖

            var a = 10
            var b = 20
            if(a>b){
                console.log(a)
            }else{
                console.log(b)
            }

            var x = 10
            var y = 20
            if(x>y){
                console.log(x)
            }else{
                console.log(y)
            }

使用函数对其进行封装

        function getMax(a, b){
            if(a>b){
                console.log(a)
            }else{
                console.log(b)
            }
        }
        getMax(10, 20)
        getMax(30, 15)
        getMax(30, 66)
函数输出表格
    function printTable(rows, cols){
            var str = '<table border="1" width="500" height="200">'
                for(var i=1; i<=rows; i++){
                    str += '<tr>'
                        for(var j=1; j<=cols; j++){
                            str += '<td></td>'
                        }
                    str += '</tr>'
                }
                str += '</table>'
            document.write(str)
            document.write('<hr/>')
        }
        printTable(10, 5)
        printTable(5, 6)
计算两个文本框的和
   <input type="text" value="" id="txt1">
   +
   <input type="text" value="" id="txt2">
   <!-- onclick(事件)这个html属性,可以帮助咱们调用函数(当点击按钮的时候调用函数) -->
   <button onclick="getSum()">计算</button>
   <input type="text" value="" id="txt3">
    function getSum(){
           txt3.value = Number(txt1.value) + Number(txt2.value)
       }

函数调用

  • 通过函数名称加括号形式
  • 通过事件来调用函数(函数只有在你触发事件的时候调用,可以做到控制代码执行时间)

函数调用

这里只是一种

** 第一种方式**

给元素取一个id名称,就可以直接获取到当前的元素(在js里面可以直接使用这个id名称)

一定是元素的名称是id的时候,js里面才可以直接获取。class或者name形式是不行的

第二种方式

document.getElementById()

在网页中通过id的形式获取元素

获取元素两种方式区别

第一种方式(取id,直接使用id名称),最早出现在IE浏览器(低版本)里面的,其他的浏览器是不支持这种方式的

其他浏览器支持的是document.getElementById()第二种方式,随着后面的发展慢慢的其他浏览器也支持了第一种 放松,但是为了兼容更多的浏览器,推荐大家使用第二种方式

常用事件

事件:把用户在网页中的一些列操作称之为事件,例如,鼠标点击、移入移出、键盘敲击。

onclick 单击事件,当点击(单击)的时候

onmouseover 移入事件

onmouseout 移出事件

onload 加载事件

事件绑定 : 把元素和事件绑定在一起,这样就可以通过事件调用函数

语法

 ele.事件名称 = function(){}

说明 : 把没有名称的函数称之为匿名函数

js代码位置问题

正常的情况下只要不涉及获取元素、操作元素那么你的js代码放在页面的任何地方其实都可以

html、css、js代码开始都是按照自上而下的顺序去加载和执行的,

但是在加载的过程中如果遇到了script标记,那么此时其他代码要暂停执行,会优先把js代码执行完毕后,再去执行其他的代码

onload事件:当网页中其他的内容加载完毕后,才会去执行它里面的代码

return函数返回值

  • return是函数隐含的一个参数,可以把函数内部的数据给函数外部返回
  • 把return理解为是函数内部和外部沟通的一个‘桥梁’

函数访问规则:函数内部可以访问函数外部的数据, 函数外部是访问不了函数内部的数据

需求:

有时候希望函数外部可以拿到函数内部的数据,因此可以使用return

函数外部拿到函数内部数据方式:

可以通过函数名称加括号的形式来拿到

return 数据 <-> fn()
思考:函数外部为什么要通过fn()这种形式拿到函数内部的值呢

原因

  • 如果在外界直接使用函数内部的变量名称,那么很容易产生命名冲突问题
  • 函数名称加括号表示函数调用,那么再给它加了层含义,这样的话一举两得

函数名称加括号作用

  • 第一层意思是表示函数的调用
  • 第二层意思是表示的是接收函数内部返回的数据

注意:当一个函数没有返回值的时候,那么外界接收的到就是undefined

function fn(){
            console.log(123)
        }
        console.log(fn()) // undefined
函数返回值的应用

求两个数的最大值:

    // 求两个数的最大值
        function getMax(a, b){
            var max
            if(a>b){
                max = a
            }else{
                max = b
            }
            return max
        }
        var res = getMax(10, 20)
        document.write('最大值:'+res)

非空验证:

    <input type="text" id="txt" value="">
    <button id="btn">提交</button>
// 获取元素
        var txt = document.getElementById('txt')
        var btn = document.getElementById('btn')

        // length表示字符的长度
        // console.log(txt.value.length)

        // 事件绑定
        btn.onclick = function(){
            // 非空验证
            if(txt.value == ''){
                alert('亲,内容不能为空!')
                return
            }
            // 验证字符的长度
            if(txt.value.length > 6){
                alert('亲,字符最多只能输入6个!')
                return
            }
            console.log('hello')
        }

选择器封装:

<button id="btn">按钮</button>
    <div id="box">hello</div>
    <script>
        // var btn = document.getElementById('btn')
        // var box = document.getElementById('box')

        // 注意点:在很多的框架里面,把获取选择器的名称习惯性使用$来表示,当然咱们也可以
        // 选择器封装
        // function getEle(id){
        //     return document.getElementById(id)
        // }
        // var btn = getEle('btn')
        // var box = getEle('box')
        // console.log(btn, box)

        function $(id){
            return document.getElementById(id)
        }
        var btn = $('btn')
        var box = $('box')
        console.log(btn, box)
    </script>