日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

函数,匿名函数新认知(与预解释、作用域的关系)

發布時間:2025/7/14 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 函数,匿名函数新认知(与预解释、作用域的关系) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大家都應該知道j函數的2中寫法:

1 //函數聲明 2 function fun () { 3 return true; 4 }
5 //匿名函數 or 函數表達式 or 函數變量化
6 var var2fun = function () {
7 return false;
8 }

可以這樣(函數變量化)大概是因為:js是弱類型語言,定義變量的時候只有一個var,為變量賦值時會自動判斷類型并進行轉換。 ? ? (提出一個問題!javascript在 var 時候做了什么!)

這里我們主要關注一下他們的區別吧!

大家都知道javascript是解釋性語言。以語句塊和語句行的形式邊讀取邊執行,雖然沒有編譯整個過程,但會有預解析(這個過程會在作用域內,把函數、變量前置)

?預解釋前置 ? ?(輸出代碼為追加的測試代碼)

var var2fun ; //預解析后 變量前置 具體的函數實現還是在相應位置的語句塊 //一般函數 function fun() {return true; }console.log(fun);//-->function fun() { return true;} console.log(var2fun);//--> undefined console.log(fun());//-->true console.log(var2fun());//--> 報錯了//函數變量化 var2fun = function () { returnfalse; }

函數的 預解釋和閉包的關系

大家知道函數預解釋會前置,但是前置式有影響范圍的,前置只是在最接近的母體(作用域)里面前置。不會前置到母體的母體

function fun1() {return true; }//函數變量化 (function() {console.log("1"+fun1()); //->false fun1在這個函數母體內(預編譯前置)后返回falsefunction fun1 () {return false;}console.log("2"+fun1()); //->false 不用多說 })()console.log("4"+fun1()); //->true 在上母體是(閉包)環境 本作用域不受到影響 即返回true

匿名函數的 預解釋和閉包的關系

上代碼和結果

var fun1 = function() {return true; }//函數變量化 ;(function () {console.log("1"+fun1); //->undefined fun1在這個函數母體內(預編譯前置) 會把 var fun1; 前置到閉包的前面,但是沒有賦值、也不會影響外部函數fun1console.log("1"+fun1()); //->error fun1 is not a function 雖然前置了var fun1 = function () {return false;}console.log("2"+fun1()); //->false 不用多說 })()console.log("4"+fun1()); //->true 在上母體是(閉包)環境

?

語言表達水平匱乏啊!~

不知道大家明白了沒

簡單總結起來就是

1、js預編譯時候 ?會先定義變量,再預定義函數

2、變量只做聲明,不初始化;初始化在初始化語句執行時候。這個同時也適用于匿名函數的變量化。變量化的匿名函數會先聲明,不會初始化

3、函數的預解釋是在就近的作用域(母體)內,最后語句解釋也是在就近的作用域內

轉載于:https://www.cnblogs.com/liubl/p/5078745.html

總結

以上是生活随笔為你收集整理的函数,匿名函数新认知(与预解释、作用域的关系)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。