函数的自调用
var a =100
function fn(){
console.log(666)
fn()//函数自调用,一直调用下去
}
fn()
function fn(){
console.log(123)
return 100//结束执行,后面的代码不执行,只打印1次
fn()
}
fn()
function fn(n) {
if (n<=1) {
return n
} else {
return n*fn(n-1)
}
}
var re = fn(12)//做10!
console.log(re)
function fn(n){
if (n>=0) {
return n+fn(n-4)
} else {
return 0//最后一次返回0 防止误差
}
}
var re = fn(2022)//2022+2018+2014+2010.......
console.log(re)
function fn(n){
if (n>=1) {
return n+fn(n*0.7)
} else {
return 0
}
}
var re = fn(158)
//每次加自身*0.7 小于1时结束
console.log(re)
function fn(n) {
if (n >= 3) {
return n + fn(n*0.5+1)
} else {
return 0
}
}
var re = fn(100)
console.log(re)
var arr = [
[1, 2, 3, 4],
[2, 3, 4, 5],
[2, 3, 4, 5],
[6, 1, 55, 47]
]
function fn(arr) {
for (var i = 0; i < arr.length; i++) {
if (typeof(arr[i]) == "number") {
console.log(arr[i])
} else {
for (j = 0; j < arr[i].length; j++) {
console.log(arr[i][j])
}
}
}
}
fn(arr)//将数组每个数字输出,判断arr[i]是否为数组,如果是就继续遍历
fn标识符的问题 因为它是函数定义时的名字 函数内部可以访问
var obj={say:function fn(n){
console.log(666)
if(n<0){
return
}
say(n-1)//报错
fn(n-1)
}}
obj.say(10)
function fn(a,b){
//实参==>调用时传入的数据(两种写法 数据直接量 变量)
//arguments.length实参数量
argument.callee运行的函数对象
}
fn(10,20)
(function(n) {
if (n <= 1) {
console.log(1)
} else {
console.log(n)
arguments.callee(n - 1)//调用没有名字的函数
}
})(10)