精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

深入理解 JavaScript 中的 With 語句

開發 前端
With 語句存在明顯的性能問題,這在幾乎所有參考書中都有提到,但很少有例子來說明這一點。你可以自己進行代碼測試,以更直觀地量化理解 with 語句的性能。

通常來說,所有 JavaScript 開發人員都有一個共同的概念:“避免使用 with 語句。” 這條準則無疑是正確的,但并不是每個人都能很好地解釋為什么。雖然只記住“不要使用它”的結果就足夠了,但理解其背后的原因對于深入理解 JavaScript 語言和編寫高質量代碼非常有幫助。

with 語句

with 語句的初衷是為了避免冗長的對象調用:

foo.bar.baz.x = 1;
foo.bar.baz.y = 2;
foo.bar.baz.z = 3;

with(foo.bar.baz) {
    x = 1;
    y = 2;
    z = 3;
}

但實際上,使用變量替換是相當簡單的:

var p = foo.bar.baz;
p.x = 1;
p.y = 2;
p.z = 3;

因此,看起來一開始就不需要 with。如今,使用 with 的人已經很少了。在嚴格模式下,使用 with 會直接報錯:

function foo() {
    'use strict';
    with ({}) {}
}

因此,with 已經被完全廢棄,人們甚至懶得去關注其原因。

書中的陳述

既然是總結,我想盡可能全面,所以讓我們先從書籍開始。關于 JavaScript 的書籍,以下是一些主要參考:

《JavaScript 權威指南》(第 5 版,David Flanagan,P109):

with (Object) statement with 語句用于暫時修改作用域鏈… 這種語句實際上是將對象添加到作用域鏈的開頭,然后執行語句,再將作用域鏈恢復到原來的狀態… 盡管有時使用 with 語句更方便,但人們反對使用它。使用 with 語句的 JavaScript 代碼難以優化,因此其執行速度比不使用 with 語句的等效代碼慢得多。此外,在 with 語句中定義函數和初始化變量可能會產生與直覺相悖的意外行為(這種行為及其原因非常復雜,我們在此不再解釋)。

《JavaScript 高級程序設計》(第 3 版,Nicholas C. Zakas,P60):

with 語句的目的是將代碼的作用域設置為特定對象… 由于頻繁使用 with 語句導致的性能下降,以及調試代碼的困難,不建議在開發大型應用程序時使用 with 語句。

《JavaScript 語言精粹》(Douglas Crockford,P110):

這個語言中存在 with 語句嚴重影響了 JavaScript 處理器的速度,因為它破壞了變量名的詞法作用域綁定。它的初衷是好的,但如果沒有它,JavaScript 語言會稍微好一些。

《深入理解 ECMAScript 6》(Axel Rauschmayer,P153):

這本書是我唯一一本用了一頁多的篇幅詳細解釋了 JavaScript 中廢棄 with 的原因的基礎參考書。

好了,讀了這么多書,讓我們現在進入本文的主要話題:

為什么不使用 with 語句?

綜上所述,主要考慮如下:

性能問題

with 語句存在明顯的性能問題,這在幾乎所有參考書中都有提到,但很少有例子來說明這一點。你可以自己進行代碼測試,以更直觀地量化理解 with 語句的性能。

var a = {a: {a: 1}};
function useWith() {
    with (a.a) {
        for (var i = 0; i < 1000000; i++) {
            a = i; 
        }
    }
}

var b = {b: {b: 1}};
function noWith() {
    for (var i = 0; i < 1000000; i++) {
        b.b.b = i; 
    }
}

var t1 = new Date().getTime();
useWith();
alert(new Date().getTime() - t1);

var t2 = new Date().getTime();
noWith();
alert(new Date().getTime() - t2);

在對象屬性賦值一百萬次時,性能差異是否顯著?

當然,在實際使用中,極少有執行數百萬次的循環,損失在可接受范圍內。因此,性能損失并不是廢棄 with 語句的主要原因。

不可預測性

使用 with 語句導致的不可預測性是廢棄 with 的根本原因。with 強行截斷詞法作用域,臨時將對象插入作用域鏈。這導致代碼變得難以捉摸。

例如:

function foo(a) {
    with (a) {
        console.log(a);
    }
}

foo("sword");     // 輸出: sword
foo({});          // 輸出: [object Object]
foo({a: "sword"}); // 輸出: {a: "sword"}

在這個簡單例子中,字符串 "sword" 和空對象沒有問題。然而,當傳遞的參數是具有名為 a 的屬性的對象時,強行發生 a.a 訪問。

這只是一個參數的情況。如果有很多參數呢?當不知道傳入參數有什么屬性時,可以想象在多個參數之間引用各種屬性會有多么混亂。這就是所謂的“令人驚訝和違反直覺”的行為本質。

此外,在 with 語句中聲明的變量并不屬于 with 指定的對象:

var a = {};   
with (a) {
    x = 'sword';
    var y = 'wang';
}

console.log(a.x);        // undefined
console.log(a.y);        // undefined
console.log(window.x);   // sword
console.log(window.y);   // wang

在 with 中聲明的變量被添加到外部函數中。

function foo() {
    with ({}) { x = 'sword'; }
    console.log(x);
}
foo();  // 輸出: sword

這可能和你想象的有些不同。

單單通過標識符及其上下文,是無法確定語句中的標識符指向什么的。這才是 with 被棄用的真正原因。它強行混淆了上下文,使程序的預測和解析變得困難,導致了后面會討論的優化問題。

代碼無法優化

由于無法預測,代碼的含義不斷變化。不同的調用,甚至相同的調用,由于運行時的變化可能會偏離,使得代碼無法優化。

優化涉及兩個方面。一方面,解析和執行變慢,這指的是前面提到的性能。另一方面,對于代碼優化和壓縮工具,如果無法確定是否正在使用變量或屬性,則無法重命名(因為屬性無法重命名)。

總結

在這個炎熱的夏天,我可能被熱氣蒸得有些思維散亂。心血來潮,我翻出了幾本關于 JavaScript 的書,想要探討一下這個被廣泛詬病的 with 語句。說著說著,似乎偏離了主題,胡亂扯了一些看似深奧但不太實用的內容。寫完之后,我自己都覺得“哇,這人真閑”。

哦,對了,文章開頭還有一個冷笑話,說 JavaScript 比 Java 多 60%。我只是在調侃它們的字符數。“JavaScript” 比 Java 多五個字母;如果你堅持數字符,那么大概是多了 60%。好吧,可能這個笑話有點冷,難怪外面這么熱——看來我得冷靜一下。

寫這些東西可以算是一種消暑和消磨時間的方式。希望你讀到這里時,也能在這個夏季找到屬于你的涼爽享受。至于 with 語句——了解它并擱置一旁,因為我們反正不會用了,不是嗎?

責任編輯:姜華 來源: 大遷世界
相關推薦

2020-12-16 09:47:01

JavaScript箭頭函數開發

2013-11-05 13:29:04

JavaScriptreplace

2021-02-17 11:25:33

前端JavaScriptthis

2015-11-04 09:57:18

JavaScript原型

2011-03-02 12:33:00

JavaScript

2019-11-05 10:03:08

callback回調函數javascript

2024-09-02 14:12:56

2020-07-24 10:00:00

JavaScript執行上下文前端

2017-03-28 21:39:41

ErrorsStack trace代碼

2017-04-25 15:30:23

堆棧函數JavaScript

2018-07-09 15:11:14

Java逃逸JVM

2016-08-31 15:50:50

PythonThreadLocal變量

2010-06-28 10:12:01

PHP匿名函數

2023-10-08 08:53:36

數據庫MySQL算法

2014-06-23 10:42:56

iOS開發UIScrollVie

2016-12-08 15:36:59

HashMap數據結構hash函數

2020-07-21 08:26:08

SpringSecurity過濾器

2010-06-01 15:25:27

JavaCLASSPATH

2013-06-20 10:25:56

2012-04-12 09:38:21

JavaScript
點贊
收藏

51CTO技術棧公眾號

欧美一级淫片videoshd| 亚洲第一黄色网| 亚洲永久一区二区三区在线| 在线中文字幕网站| 国产在线日韩| 亚洲天堂男人天堂| 免费不卡av网站| 热三久草你在线| 国产精品久久久久一区| 国产欧美精品一区二区三区| 伊人网中文字幕| 亚洲激情国产| 日韩网站在线观看| 国产精品无码网站| 精品国产亚洲一区二区三区大结局| 黄色精品一区二区| 中文字幕av导航| 五月婷婷激情在线| 国产美女在线观看一区| 热久久免费视频精品| 青娱乐国产在线| 日韩国产欧美一区二区| 亚洲精品在线一区二区| 国产成人美女视频| 在线免费看h| 一区二区三区在线观看视频| 日日噜噜噜噜夜夜爽亚洲精品| 亚洲欧美强伦一区二区| 捆绑调教一区二区三区| 人人爽久久涩噜噜噜网站| 欧美毛片在线观看| 国产精品成人av| 亚洲日韩欧美视频| 国产亚洲色婷婷久久99精品91| 精品视频一区二区三区| 欧美亚洲动漫另类| 精品久久一二三| 久久99亚洲网美利坚合众国| 亚洲天堂精品在线观看| 亚洲精品视频一二三| 奇米影视888狠狠狠777不卡| 成人aaaa免费全部观看| 国产精品国产亚洲精品看不卡15| 国产永久免费视频| 日本不卡在线视频| 国产精品电影观看| 无码人妻精品一区二区三区不卡 | 国产成人啪精品午夜在线观看| 国产精品成人一区二区不卡| 伊人青青综合网站| 中文字幕人妻一区二区三区在线视频| 日韩美女精品| 日韩精品中文字幕在线| 国产精品探花一区二区在线观看| 久久亚州av| 亚洲第一网站免费视频| 国产51自产区| 国内自拍欧美| 亚洲黄在线观看| 波多野结衣影院| 久久久精品国产**网站| 亚洲精品国产精品自产a区红杏吧| 亚洲色图欧美另类| 国产精品传媒| 日韩国产在线播放| 精品成人av一区二区三区| 免费黄色成人| 伊人伊人伊人久久| 四虎影视1304t| 一区二区三区国产精华| 欧美疯狂xxxx大交乱88av| 久久午夜无码鲁丝片| 最新日韩欧美| 日韩免费观看视频| 综合久久中文字幕| 国产中文字幕精品| 国产精成人品localhost| 日本精品久久久久久| 久久久亚洲综合| 亚洲视频在线观看日本a| 超碰在线网址| 午夜精品一区二区三区三上悠亚| 久久网站免费视频| 亚洲成人精品综合在线| 日韩精品专区在线影院观看| 久久久久麻豆v国产精华液好用吗 在线观看国产免费视频 | 少妇熟女视频一区二区三区| 国产精品主播在线观看| 亚洲人高潮女人毛茸茸| 欧美成人777| 亚洲作爱视频| 国产区精品在线观看| 日本wwwxxxx| 国产精品人妖ts系列视频| 最新av网址在线观看| 手机av在线| 欧美日韩情趣电影| 国产精品熟妇一区二区三区四区| 免费看日本一区二区| 久久成人精品视频| 免费av网站在线| 国产毛片精品国产一区二区三区| 久久国产精品 国产精品| 日韩伦理在线观看| 精品久久久久久久久久久| 色www免费视频| 美国成人xxx| 欧美成人免费在线观看| 天天射天天干天天| 丁香婷婷深情五月亚洲| 三区精品视频观看| 色在线视频观看| 日韩一卡二卡三卡四卡| 长河落日免费高清观看| 国产亚洲欧洲| 国产精品成人一区二区三区| 一级日本在线| 在线视频国内自拍亚洲视频| 欧美久久久久久久久久久| 欧美hd在线| 日本欧美爱爱爱| 免费观看国产视频| 亚洲免费伊人电影| 中文久久久久久| 亚洲人成网www| 韩国19禁主播vip福利视频| 888奇米影视| 国产日韩欧美高清| 国产日韩一区二区在线| 国产一区调教| 欧美黑人极品猛少妇色xxxxx | 精品福利一二区| 91杏吧porn蝌蚪| 美女脱光内衣内裤视频久久网站 | yy1111111| 欧美精品国产一区| 91美女片黄在线观看游戏| 大地资源中文在线观看免费版| 欧美日韩另类视频| 亚洲一区二区在线免费| 黄色av成人| 91嫩草国产在线观看| 国产黄a三级三级三级av在线看| 色综合久久久久网| 亚洲做受高潮无遮挡| 亚洲国产一区二区三区a毛片| 波多野结衣成人在线| 97影院秋霞午夜在线观看| 91精品国产91综合久久蜜臀| 久久人妻无码aⅴ毛片a片app| 麻豆精品在线播放| 中文字幕欧美人与畜| 日韩五码电影| 俺去啦;欧美日韩| 国产欧美第一页| 亚洲男人天堂一区| 潘金莲一级淫片aaaaa| 狠狠入ady亚洲精品| 国产成人成网站在线播放青青| 欧美日韩色网| 亚洲国产欧美日韩精品| 99久热在线精品996热是什么| 26uuu久久天堂性欧美| 日本在线观看a| 日韩国产综合| 成人欧美一区二区三区黑人孕妇| 宅男在线观看免费高清网站| 亚洲成人a级网| 日本中文在线播放| 欧美国产丝袜视频| 日本中文字幕在线不卡| 精品福利电影| 欧美视频观看一区| 日本免费一区二区三区等视频| 欧美另类交人妖| 四季av日韩精品一区| 色美美综合视频| 国产白丝一区二区三区| 国产成人综合亚洲网站| 青青艹视频在线| 青青草原综合久久大伊人精品| 成人在线视频网站| av在线视屏| 中文字幕av一区中文字幕天堂 | 日本少妇性生活| 国产亚洲欧美日韩日本| www.五月天色| 国产精品毛片| 国产又大又长又粗又黄| 激情小说亚洲色图| 国产精品免费久久久久久| 色呦呦在线视频| 亚洲亚裔videos黑人hd| www.久久久久久| 欧洲生活片亚洲生活在线观看| 欧美成人手机视频| 国产日韩高清在线| www.美色吧.com| 麻豆久久一区二区| 亚洲熟妇无码另类久久久| 99热在线成人| 久久精品第九区免费观看| 色噜噜成人av在线| 久久久伊人日本| 日本视频在线播放| 亚洲精品一区二区三区婷婷月| 国产男男gay体育生网站| 精品久久久久久中文字幕大豆网| 亚洲区一区二区三| 久久精品夜夜夜夜久久| 97人妻精品一区二区三区免费| 另类欧美日韩国产在线| 成年人观看网站| 欧美日韩爆操| 亚洲永久激情精品| 少妇精品久久久一区二区| 动漫一区二区在线| 99精品女人在线观看免费视频| 日本久久久久亚洲中字幕| 国产探花在线观看| 成人97在线观看视频| 成人性爱视频在线观看| 亚洲国产天堂久久综合| 国产极品999| 欧美高清视频不卡网| 无码人妻丰满熟妇区bbbbxxxx| 精品电影在线观看| 国产一级二级毛片| 亚洲精品中文在线影院| 五月天免费网站| 日本一区二区不卡视频| 精品少妇一区二区三区免费观| 99久久国产综合精品色伊| 人妻精油按摩bd高清中文字幕| 久草中文综合在线| 污版视频在线观看| 欧美aaa在线| 中文字幕永久视频| 日韩国产高清影视| 中文字幕无码不卡免费视频| 亚洲一区网站| 亚洲色成人一区二区三区小说| 国产欧美日韩亚洲一区二区三区| 搞av.com| 亚洲欧美网站| 熟女少妇在线视频播放| 中文一区在线| 日本免费一级视频| 亚洲视频播放| 精品www久久久久奶水| 久久资源在线| 中文字幕在线导航| 美女一区二区三区| 亚洲三级在线观看视频| 国产伦精品一区二区三区免费迷 | 午夜啪啪小视频| 激情深爱一区二区| 中文字幕乱妇无码av在线| 国产激情一区二区三区| 丰满人妻一区二区三区免费视频棣| 成人免费视频播放| 日本japanese极品少妇| 26uuu另类欧美| 91大神福利视频| 一卡二卡欧美日韩| 日韩精品视频免费播放| 色呦呦日韩精品| 中文字幕人妻精品一区| 91精品久久久久久蜜臀| 亚洲国产剧情在线观看| 亚洲精品福利免费在线观看| 成在在线免费视频| 久久精品最新地址| av电影院在线看| 国产不卡av在线免费观看| 婷婷久久免费视频| 97免费资源站| 香蕉久久精品| 亚洲精品日韩精品| 在线成人亚洲| 丰满少妇在线观看| 粉嫩在线一区二区三区视频| 久久人人爽人人人人片| 国产精品免费视频一区| 久久国产免费观看| 在线视频欧美区| 成人1区2区3区| 亚洲视频自拍偷拍| 亚洲奶水xxxx哺乳期| 秋霞午夜一区二区| 美女精品久久| 日韩av图片| 激情婷婷亚洲| 97超碰人人爽| 91在线一区二区| 91n在线视频| 黑人精品xxx一区一二区| 国产一区二区三区三州| 亚洲精品短视频| 1区2区3区在线视频| 日韩免费在线看| 福利在线一区| 亚洲一区免费看| 久久深夜福利| 乱码一区二区三区| 亚洲欧洲美洲综合色网| 国产精品午夜影院| 日韩一区二区三区精品视频| 极品白浆推特女神在线观看 | 五月天男人天堂| 午夜在线一区二区| 2025中文字幕| 日韩毛片视频在线看| 亚洲 欧美 日韩 在线| 亚洲成在人线av| 91香蕉在线观看| 91精品国产综合久久男男| 久久久亚洲影院| 国产二级一片内射视频播放| 国产亚洲1区2区3区| 日本少妇性高潮| 91精品婷婷国产综合久久| 国产51人人成人人人人爽色哟哟| 久久久免费观看| 日韩欧洲国产| 一区二区冒白浆视频| 首页亚洲欧美制服丝腿| 玖玖爱在线精品视频| 夜夜爽夜夜爽精品视频| 国产人妖在线播放| 丝袜美腿精品国产二区| 色成人免费网站| 欧美日韩国产三区| 国产午夜久久| 香蕉视频黄色在线观看| 午夜视频在线观看一区| 亚洲高清视频网站| 久国内精品在线| 日韩最新av| 欧美极品少妇无套实战| 国产精品综合一区二区三区| 看免费黄色录像| 678五月天丁香亚洲综合网| 国产福利视频在线观看| 亚洲在线免费看| 欧美精品三级| 亚洲少妇一区二区三区| 性做久久久久久免费观看欧美| 免费看黄网站在线观看| 91sa在线看| 亚洲肉体裸体xxxx137| 欧美国产日韩在线播放| 国产午夜精品一区二区三区嫩草 | 欧美xxxx黑人xyx性爽| 欧美高清www午色夜在线视频| 午夜视频在线观看免费视频| 成人动漫网站在线观看| 一精品久久久| 91丨porny丨对白| 欧美性xxxxx极品| av资源种子在线观看| 成人激情电影一区二区| 欧美视频日韩| 中文在线永久免费观看| 91久久精品网| 黄色成人在线观看| 国产精品免费在线| 久久三级福利| 国产精品国产三级国产传播| 日韩精品中文字幕一区| 日本不卡1234视频| 日本成人三级电影网站| 九色|91porny| 中文字幕一区二区三区手机版| 亚洲欧美日韩国产成人| 成人在线观看免费播放| 大片在线观看网站免费收看| 91视频观看视频| 91精品人妻一区二区三区果冻| 久久69精品久久久久久久电影好 | 国产精品无码久久av| 欧美乱大交xxxxx| 神马久久av| 欧美一级特黄a| 亚洲国产欧美另类丝袜| 国产黄色片在线观看| 亚洲在线第一页| 久久精品1区| 538任你躁在线精品视频网站| 日韩高清a**址| 成人豆花视频| www黄色日本| 亚洲人吸女人奶水| 久久经典视频| 不卡一区二区三区四区五区| 久久九九电影| 久久精品国产亚洲av香蕉| 中日韩美女免费视频网址在线观看| 亚洲综合影院| 手机在线成人免费视频|