函数和作用域

2017-10-06  本文已影响0人  Lucien_d70a

函数声明和函数表达式有什么区别?

什么是变量的声明前置?什么是函数的声明前置?

//预解析的时候会 var a=undefined

console.log(a)//undefined
var a=1
//预解析的时候会 function f(){} 我是一个函数!!!

f()//"我爱饥人谷"
function f(){
  console.log("我爱饥人谷")
}
f()//"我爱饥人谷"
//预解析的时候var f=undefined

f()//报错
var f=function (){
  console.log("hi")
}

arguments 是什么?

函数的"重载"怎样实现?

function fn(name,age,sex){
 if(name){
     return name;
  }
 if(age){
     return age;
  }
 if(sex){
     return sex;
  }
}
fn("方方",18,"女")//"方方" 18 "女"
fn("方方",18)//"方方" 18 

立即执行函数表达式是什么?有什么作用

ps记录一个题目:

14.以下代码输出什么? 写出作用域链查找过程伪代码

    var a = 1;

    function fn(){
      console.log(a)//预解析的时候里面的a还是undefined
      var a = 5
      console.log(a)//a已经赋值 等于5
      a++
      var a //这时候a改变为6
      fn3()//1
      fn2()//6
      console.log(a)//所以我等于20

      function fn2(){
         console.log(a)//我这里没有a,我找上一级,a等于6
         a = 20//这时候我改变了fn里面的a 等于20
        } 
     }

    function fn3(){
       console.log(a)//fn3里面没有声明,我去找上一级全局变量里的,等于1
       a = 200//全局变量a变为200
    }

    fn()//undefined 1 6 20 200
    console.log(a)//全局变量已经被fn3的a污染了,所以200

    /*globalcontext={
            AO:{
                a:1 (a=20 -> a=200)
                fn:function
                fn3:function
            }
            scope:null
        }

        fn[[scope]]=globalcontext.AO
        fn3[[scope]]=globalcontext.AO

        fncontext={
            AO:{
                a:5 (-> a++ -> a=6)
                fn2:function
            }
            scope:globalcontext.AO
        }
        
        fn3context={
            AO:{}
            scope:globalcontext.AO
        }


        fn2[[scope]]=fncontext.AO 

        fn2context={
            AO:{}
            scope:fncontext.AO 
        }
        */
上一篇 下一篇

猜你喜欢

热点阅读