ToB企服应用市场:ToB评测及商务社交产业平台

标题: JavaScript基础-函数(完备版) [打印本页]

作者: 数据人与超自然意识    时间: 2024-10-15 16:54
标题: JavaScript基础-函数(完备版)
函数


根本利用

函数提升


函数参数


  1. function getSum(x,y) {
  2.     console.log(x,y) //3 5
  3.     return x + y
  4. }
  5. let res = getSum(3,5)
  6. console.log(res) //8
复制代码
  注意:在js中,形参和实参的个数可以不同等。形参过多会自动填上undefined;实参过多,会忽略多余的实参。
  发起:开辟中保持形参和实参的个数同等。
  arguments对象(了解)


剩余参数(重点)


  1. <body>
  2.     <script>
  3.         function fn(a, b, ...c) {//剩余参数只能写在参数的最后面
  4.             console.log(a + b, c) //c:真数据(数组)
  5.         }
  6.         fn(1, 2, 3, 4, 5)
  7.     </script>
  8. </body>
复制代码

睁开运算符(…)


  1. <body>
  2.     <script>
  3.         //展开运算符
  4.         // 数组
  5.         const arr = [1, 2, 3]
  6.         console.log(...arr)
  7.         // 对象
  8.         const obj = {
  9.             uname: 'niuniu',
  10.             age: 18
  11.         }
  12.         console.log({...obj})
  13.         // 应用:数组的展开,求最大值
  14.         console.log(Math.max(1, 2, 3, 9))
  15.         console.log(Math.max(...arr))
  16.         // 合并数组
  17.         const arr1 = [4, 5, 6]
  18.         const arr2 = ['haha', 'lala', 'xixixi']
  19.         const arr3 = [...arr1, ...arr2]
  20.         console.log(arr3)
  21.         // 合并对象
  22.         const obj1 = {
  23.             uname: 'niuniu'
  24.         }
  25.         const obj2 = {
  26.             age: 18
  27.         }
  28.         const obj3 = {
  29.             ...obj1,
  30.             ...obj2
  31.         }
  32.         console.log(obj3)
  33.     </script>
  34. </body>
复制代码
逻辑停止


  1. function getSum(x,y) {
  2.     //逻辑中断:如果 实参 没有传递给形参 x 和 y ,则会返回 0,而不是NaN
  3.     x = x || 0
  4.     y = y || 0
  5.     console.log(x,y)
  6. }
  7. getSum(2) //2 0  => 如果没有逻辑中断,则返回 NaN
  8. getSum(3,6) //3 6
复制代码
函数参数-默认参数


  1. function getSum(x = 0,y = 0) {
  2.     console.log(x,y)
  3. }
  4. getSum(4,1) //4 1
  5. getSum(4)   //4 0
复制代码
函数返回值-return

作用域(scope)


全局作用域

局部作用域

   注意:
    变量的访问原则


  1. //练习1
  2. function f1 () {
  3.     let num = 123
  4.     function f2 () {
  5.         console.log(num)    //123
  6.     }
  7.     f2()
  8. }
  9. let num = 234
  10. f1()
  11. // 练习2.
  12. let a = 1
  13. function fn1() {
  14.     let a = 2
  15.     let b = '22'
  16.     fn2()
  17.     function fn2() {
  18.         let a = 3
  19.         fn3()
  20.         function fn3() {
  21.             let a = 4
  22.             console.log(a)  //4
  23.             console.log(b)  //'22'
  24.         }
  25.     }
  26. }
  27. fn1()
复制代码
垃圾接纳机制


闭包


   简单理解:闭包 = 内层函数 + 外层函数的变量
  
  1. <body>
  2.     <script>
  3.         // 闭包 : 内层函数 + 外层函数的变量
  4.         // function outer() {
  5.         //     let  a = 1
  6.         //     function f() {
  7.         //         console.log(a)
  8.         //     }
  9.         //     f()
  10.         // }
  11.         // outer()
  12.         // 案例:统计函数的调用次数
  13.        function fn() {
  14.         let count = 0
  15.         function fun() {
  16.             count++
  17.             console.log(`fn函数调用了${count}次`)
  18.         }
  19.         return fun
  20.        }
  21.        const f = fn()
  22.        f()
  23.   </script>
  24. </body>
复制代码
匿名函数

函数表达式

立即执行函数

   注意:多个立即执行函数要用 ; 隔开,前后都要,否则会报错。
  箭头函数


  1. <body>
  2.     <script>
  3.         //箭头函数 基本写法
  4.         // const fn = () =>         //     console.log('我是箭头函数')
  5.         // }
  6.         // fn()
  7.         // 细节写法
  8.         // const fn = a => console.log(a)
  9.         // fn(1)
  10.         // const fn = a => a
  11.         // const res = fn('niuniu')
  12.         // console.log(res)
  13.         // const fn = () => {
  14.         //     const obj = {
  15.         //         uname: 'niuniu',
  16.         //         age: 18
  17.         //     }
  18.         //     return obj
  19.         // }
  20.         // const res = fn()
  21.         // console.log(fn())
  22.         // const fn = () => ({uname: 'niuniu', age: 18})
  23.         // const res = fn()
  24.         // console.log(res)
  25.         const fn = (...arr) => {
  26.             console.log(arr)
  27.         }
  28.         fn(1, 2, 3)
  29.     </script>
  30. </body>
复制代码
箭头函数中的 this (紧张)

以前函数中的this指向是根据怎样调用来确定的。简单理解就是this指向调用者
箭头函数本身没有this,它只会沿用**上一层作用域的this **。
  1. <body>
  2.     <button>按钮</button>
  3.     <script>
  4.         //箭头函数的 this问题
  5.         const btn = document.querySelector('button')
  6.         // btn.addEventListener('click', () => {
  7.         //     console.log(this) //箭头函数里的this是指向上一级作用域
  8.         // })
  9.         //定时器中使用,事件源,推荐使用箭头函数
  10.         //需求:点击按钮禁用,三秒后启用
  11.         btn.addEventListener('click', function () {
  12.             btn.disabled = true
  13.             setTimeout(() => {
  14.                 console.log(this)
  15.                 btn.disabled = false
  16.             }, 3000)
  17.         })
  18.     </script>
  19. </body>
复制代码
  注意:在开辟中【利用箭头函数前需要思量函数中 this 的值】
    ES6对象简写

断点调试-进入函数内部




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4