function foo(){ var a=2; function bar(){ //dosomething } return bar; } var baz=foo(); baz();在這段代碼中,返回了bar函數本身;如果把return bar更改為alert(bar),就會輸出: function bar(){ //dosomething }那么是不是可以認為,var baz=foo()等價于: var baz=function bar(){ //dosomething }有兩個疑問:代碼中的return bar,能夠返回函數本身么?最后這個等價函數,在形式上不是函數聲明,好像也不是函數表達式(函數表達式中的function應該是匿名的)這里該如何理解這種形式呢?還煩請大伙解惑!!補充:a、既然能寫成var baz=function bar(){//dosomething},根據這個函數目前所書寫的位置,那么現在bar()函數的下一個外包環境,就是全局環境。如果說法成立,那就會和bar在函數foo內部相互矛盾,也就是bar函數脫離了foo函數,出現在了全局環境中;那閉包豈不是不能形成??(閉包的概念:內部函數能夠訪問外部函數的變或函數。)b、如果說寫成var baz=function bar(){//dosomething}后,bar()函數還是存在于foo函數詞法作用域的內部,但是根據詞法作用域的查找規則,對bar的查找是不會進入foo函數的內部,那就應該無法調用baz();會出現報錯;而這里還能調用????
關于javascript中返回函數的案例
慕田峪9158850
2018-10-12 09:10:03