JavaScript第三天| 青训营笔记

72 阅读2分钟

这是我参与[第五届青训营]伴学笔记创作活动的第9天 函数在很多情况下要有返回值,把结果返回给用户 语法格式:return + 返回值 function fn() return 20 return相当于执行了一句话:fn()=20 return可以把函数内部的值交给外部使用, 提高了程序的扩展性

注意,return会立即结束该函数,后面的代码不会再被执行,没有return的函数,返回值类型默认为undefined

    let result = fn()
    document.write(result)
    

这里打印的是fn()的返回值,并非fn()本身

function fn(x,y){ // 求xy的和 let sum = x + y // 求xy的差 let sum2 = x - y

        /* return只能返回一个值,但是有两个计算结果怎么办?
        很简单,把这个两个结果弄成一个数组 */
        return [sum,sum2]
    }

    // 调用函数返回值的时候,从数组里面取就行了
    let result = fn(1,1)

    // 取数组下标0,也就是求xy的和
    document.write(result[0] +'<br>')
    // 取数组下标1,也就是求xy的差
    document.write(result[1])
    

昨天学到了作用域,今天提到了一个概念,作用域链

    作用域:代码只在哪个范围生效
    全局作用域:在整个script标签里面有效
    局部作用域:也称函数作用域,只在函数内有效
    块作用域:只在{}里有效 =
    let num1 = 1 // 全局变量
    // 可以在整个script里被修改、使用

    function fn(){
        let num2 = 10 // 局部变量
    // 只能在fn()的作用域里使用
    }

    // 要注意一个嵌套的问题
    function father(){
        let num3 = 10
        console.log(num3)
        function son(){
            let num4 = 10
            console.log(num1)
        /* 在这里为什么可以调用最外面的num1呢?
           子函数可以调用父级的变量! */
        }
        son()
        console.log(num4)
        // 但是父级不能调子函数里面的变量!
    }
    father()

这里还有一个随机取数的案例 // 求x,y之间的随机数 // 公式:Math.floor(Math.random()*(x-y+1)) + y

    // 求1-6之间的随机数
    let num = Math.floor(Math.random()*(6-1+1)) + 1
    document.write(num)

    // 把公式封装成函数
    function getRandom(max,min){
        return Math.floor(Math.random()*(max -min +1)) + min
    }

一:全局作用域:不在函数内部作用域和块级内部作用域外的作用域

二:函数作用域:在函数内部的作用域

三:块级作用域:在花括号{}内部的作用域