这是我参与[第五届青训营]伴学笔记创作活动的第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
}