自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

淺談Javascript中的eval與with

開發(fā) 前端
Javascript的作用域是詞法作用域(lexical scope or static scope),也就是說作用域鏈在定義的時(shí)候就確定了。也提到eval、with會擾亂作用域鏈(dynamic scope)。

javascript的作用域是詞法作用域(lexical scope or static scope),也就是說作用域鏈在定義的時(shí)候就確定了。也提到eval、with會擾亂作用域鏈(dynamic scope)。

eval

IE下:運(yùn)行eval()會受當(dāng)前作用域限制,運(yùn)行execScript()則無視當(dāng)前作用域,直接在全局作用域下執(zhí)行。

Firefox下:eval()和window.eval()效果不一樣,這很奇怪,畢竟FF下,eval==window.eval。前者會受當(dāng)前作用域限制,后者無視當(dāng)前作用域,在全局作用域下執(zhí)行(相當(dāng)于IE的execScript())。

有人寫了一篇比較通俗的,參考這篇文章

with

with會暫時(shí)修改作用域鏈。

<script>
function a(){
    with (b) {
        ...
    }
}a();
</script>

函數(shù)a在定義的時(shí)候,就確定了a的作用域鏈,我們姑且認(rèn)為這條鏈的最頂端是全局對象window。

當(dāng)函數(shù)a被執(zhí)行的時(shí)候,javascript引擎生成了一個(gè)call object并將其添加到作用域鏈尾部上(window對象之后),語句運(yùn)行到with(b)時(shí),將b添加到作用域鏈的尾部,所以with之內(nèi)的變量查找,就會優(yōu)先從這條鏈的b上查找---> 然后從a的call object中查找---> ***查找window。with內(nèi)的語句執(zhí)行完之后,作用域鏈恢復(fù)原狀(b被移出作用域鏈)。

以上就是例子代碼運(yùn)行時(shí)的微觀世界。

with是不被推薦的,因?yàn)樗僮髯饔糜蜴湥ㄒ七M(jìn)、移出,多累),執(zhí)行效率低下。

有些人可能認(rèn)為with能節(jié)省代碼量,比如

with(document.forms[0]){
    name.value='';
    address.value='';
    email.value='';
}

就能少寫不少document.forms[0],
其實(shí)定義一個(gè)局部變量取代with中的b也可以達(dá)到同樣目的,效率也無損失。

var c=document.forms[0];
    c.name.value='';
    c.address.value='';
    c.email.value='';

【編輯推薦】

  1. Javascript中的replace方法與正則表達(dá)式講解
  2. 詳解Javascript trim()函數(shù)實(shí)現(xiàn)
  3. 應(yīng)用最廣的十大Javascript框架
責(zé)任編輯:彭凡 來源: kaima.cnblogs.com
相關(guān)推薦

2009-07-31 13:48:34

C# eval()函數(shù)

2017-08-28 15:21:29

異步處理回調(diào)函數(shù)異步編程

2021-07-16 07:57:35

JavaScriptEval函數(shù)

2024-07-11 14:05:28

JavaScript函數(shù)

2024-09-03 13:32:11

JavaScriptEval函數(shù)

2017-08-22 16:40:22

前端JavaScript接口

2009-06-10 22:06:29

JavaScript面向?qū)ο?/a>

2015-05-18 13:51:08

2011-07-14 10:58:26

JavaScript強(qiáng)制類型轉(zhuǎn)換函數(shù)

2013-03-26 10:27:01

JavaScriptjson

2020-12-07 06:38:32

JavaScriptEval 函數(shù)

2009-04-21 09:37:50

ASP.NETAjaxJavaScript

2009-06-18 12:21:07

javascriptdom

2009-06-24 10:49:16

JavaScript

2014-07-24 10:00:21

2015-05-06 10:02:26

2015-12-02 11:06:20

2011-09-26 10:50:16

JavaScript

2016-09-18 20:53:16

JavaScript閉包前端

2009-06-24 15:00:39

Javascript代
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號