精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
JavaScript細微差別(函數聲明與函數表達式及瀏覽器差異)

Email:longsu2010 at yeah dot net

我將描述一個JavaScript的古怪問題。幸運的是我之前從未在實際工作中出現問題。我確信function a(){}和var a = function (){}是完全相同的的。

其實我錯了,兩者有很大的不同,看下面的例子。

var a = 5;if (a == 5) {    var b = function () {        return "obvious";    };} else {    var b = function () {        return "never";    };}if (a == 5) {    function c() {        return "expected";    }} else {    function c() {        return "surprise!";    }    function d() {        return "how come?";    }}alert(b());alert(c());alert(d());

你可能說運行結果是“obvious”, “surprise!” and “how come?”,一般來說是正確的,除了Firefox。如果你定義一個命名函數,無論函數定義代碼出現在什么位置解析器都會在當前作用域中創建該函數。因此你需要提防這樣的代碼,同時不要忘記瀏覽器檢測。

另外的一個不同是函數c的name屬性值為"c"而b的name屬性為"".

c.name == "c";b.name == "";

譯者:

本文闡述了函數聲明與函數表達式的區別,同時闡述了在不同瀏覽器中的差別。這個差別之前我就知道,遇到的機會確實不多。

一般來說JavaScript進入到某一作用域時會優先處理函數聲明(不包括函數表達式,函數表達式屬于聲明變量)、形參和變量聲明(不包括賦值,所以在正式賦值前變量的值都是undefined)。

所以在函數聲明代碼之前調用該函數是沒有問題的,如果在函數表達式代碼之前調用函數表達式所定義的函數是會報錯的,因為在調用的時候函數表達式聲明的變量值是undefined。

具體在之前的博客你自認為理解了JavaScript?中有所闡述。

如上所述在Firefox中有所不同,輸出結果將是“obvious”, “expected”之后報一個沒定義的錯。看了結果就知道Firefox是怎么做的了。 


相關文章:

你自認為理解了JavaScript?

JavaScript交流貼

JavaScript中的對象(一)

消除JavaScript中的if



本站僅提供存儲服務,所有內容均由用戶發布,如發現有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
理解javascript中的立即執行函數(function(){})()
JavaScript(js)函數聲明與函數表達式的區別
在JavaScript函數內執行全局代碼
ES6:JavaScript 新特性
JavaScript執行環境+變量對象+作用域鏈+閉包
JavaScript 知識點整理
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服

主站蜘蛛池模板: 泸西县| 犍为县| 黄梅县| 碌曲县| 伊金霍洛旗| 靖远县| 宣武区| 自治县| 北票市| 丹棱县| 娱乐| 固安县| 泗阳县| 大冶市| 宜宾市| 罗山县| 肥东县| 嘉善县| 黄浦区| 闻喜县| 灵石县| 昌都县| 云南省| 浦北县| 延津县| 分宜县| 海宁市| 太原市| 西城区| 旺苍县| 蓬莱市| 浦城县| 建平县| 冕宁县| 微山县| 海原县| 泸州市| 凤凰县| 友谊县| 青海省| 庆元县|