JS进阶

185 阅读1分钟

你真的懂函数吗?

定义

匿名函数

function(){
return 1;
}
你现在直接运行会报错吗?
会!因为你声明了一个函数但是没有引用他 等于一句废话
Chrome不是傻逼不会让你过的

let fn = function(){
    return 1
}
这里可以理解为fn引用了这个函数对象 
这个function存在一个堆内存里 一般存地址
所以可以直接理解为fn存了这个函数的地址而不是函数本身

let fn2 = fn
从上面可以推断出 fn2也只是把fn地址赋给了fn2
所以fn2.name到底有没有呢?
有!fn2是个匿名函数但是它有name
name就是fn fn和fn2都指向了一个名字


具名函数

function fn3 (){
    return 3
}
这个不解释学过JS都知道
let fn5 = function fn4(){
    return 5
}
fn3这里可以全局访问因为在顶级作用域里但是fn4的作用域只有fn4的两个{}之间

箭头函数

let fn6 =e => e+1
简单写法看不懂自杀
let fn6 = (e, a) => e + a
两个参数怎么办?括号括起来
(e, a) =>  如果你后面只有一句话比如 e+a 可以不用{}和return
(e, a) => {console.log(111); return e+a}如果有两句话必须写return和{}
箭头函数也是有name哦

词法作用域

 var global1 = 1
 function fn1(param1){
     var local1 = 'local1'
     var local2 = 'local2')
     function fn2(param2){
         var local2 = 'inner local2'
         console.log(local1)
         console.log(local2)
     }

     function fn3(){
         var local2 = 'fn3 local2'
         fn2(local2)
     }
 }

函数B里的console.log(a)并不是外面的a因为这个A他是会变的啊