欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javascript中eval函數(shù)用法分析

 更新時(shí)間:2015年04月25日 12:15:57   作者:大熊貓侯佩  
這篇文章主要介紹了javascript中eval函數(shù)用法,實(shí)例分析了javascript中eval函數(shù)的使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下

本文實(shí)例分析了javascript中eval函數(shù)用法。分享給大家供大家參考。具體分析如下:

eval()只有一個(gè)參數(shù),如果傳入的參數(shù)不是字符串,則直接返回這個(gè)參數(shù)。否則會(huì)將字符串當(dāng)成js代碼進(jìn)行編譯,如果編譯失敗則拋出語(yǔ)法錯(cuò)誤(SyntaxError)異常。如果編譯成功則開始執(zhí)行這段代碼,并返回字符串中的最后一個(gè)表達(dá)式或語(yǔ)句的值;如果最后一個(gè)表達(dá)式或語(yǔ)句沒有值,則最終返回undefined。如果字符串拋出異常,則該異常將把該調(diào)用傳遞給eval();

eval()最為重要的是,它使用了調(diào)用它的變量作用域環(huán)境,即它查找變量的值和定義新變量和函數(shù)的操作和局部作用域的代碼完全一樣。

eval("var x = 100");
eval("var y = 11");
console.log(x * y); //x * y == 1100
eval("function foo(x){return Math.pow(x,x);}");
console.log(foo(5)); // 25

eval字符串執(zhí)行時(shí)的上下文環(huán)境和調(diào)用函數(shù)的上下文環(huán)境是一樣的,這不能使其作為函數(shù)的一部分來(lái)運(yùn)行:

var foo = function(a){
  eval(a);
  };
foo("return;");

以上代碼因?yàn)閳?zhí)行eval(a)的上下文是全局的,在全局上下文中使用return會(huì)拋出語(yǔ)法錯(cuò)誤:return not in function.

eval()具有修改局部變量的能力,這對(duì)于js優(yōu)化器來(lái)說(shuō)是一個(gè)很大的問題。為了讓js解釋器實(shí)現(xiàn)更加簡(jiǎn)化,ECMAScript3標(biāo)準(zhǔn)規(guī)定了任何解釋器都不允許對(duì)eval()賦予別名,如果eval()函數(shù)通過(guò)別名調(diào)用會(huì)拋出一個(gè)EvalError異常。
實(shí)際上大多數(shù)的實(shí)現(xiàn)不是這樣的。當(dāng)通過(guò)別名調(diào)用時(shí),eval()會(huì)將其字符串當(dāng)成頂層的全局代碼來(lái)執(zhí)行。執(zhí)行代碼可能會(huì)定義新的全局變量和全局函數(shù),或給全局變量賦值,但卻不能使用或修改主調(diào)用函數(shù)中的局部變量,因此不會(huì)影響到函數(shù)內(nèi)部的代碼優(yōu)化。

而在ECMAScript5中,態(tài)度有所不同:反對(duì)拋出EvalError異常。在ECMAScript5中當(dāng)直接使用非限定名來(lái)調(diào)用eval()函數(shù)時(shí),通常稱為”直接eval(direct eval)”;直接調(diào)用eval()時(shí),總是在調(diào)用它的上下文作用域內(nèi)執(zhí)行。而其他的間接調(diào)用則使用全局對(duì)象作為其上下文作用域,且無(wú)法讀寫和定義局部變量和函數(shù)。(但實(shí)際我在firebug測(cè)試?yán)锇l(fā)現(xiàn),都是修改了全局變量 :( )

需要真正eval來(lái)執(zhí)行代碼段的場(chǎng)景并不多見,可能更多的會(huì)使用全局eval而不是局部eval。

IE9之前的早期版本IE當(dāng)通過(guò)別名調(diào)用eval()時(shí)并不是全局eval,但I(xiàn)E定義了一個(gè)execScript()的全局函數(shù)來(lái)完成全局eval的功能(單核eval()稍有不同,execScript()總是返回null)。

ECMAScript5嚴(yán)格模式對(duì)eval函數(shù)行為施加了更多的限制。在嚴(yán)格模式下使用eval或eval執(zhí)行代碼以”use strict”指令開始時(shí),eval是私有上下文環(huán)境中的局部eval.此外嚴(yán)格模式將eval列為保留字,這讓eval()更像一個(gè)運(yùn)算符,不能用一個(gè)別名覆蓋eval()函數(shù),并且變量名、函數(shù)名、函數(shù)參數(shù)或者異常捕獲的參數(shù)都不能取名為”eval”.

希望本文所述對(duì)大家的javascript程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • JS限制文本框只能輸入數(shù)字和字母方法

    JS限制文本框只能輸入數(shù)字和字母方法

    這篇文章主要介紹了JS限制文本框只能輸入數(shù)字和字母方法,本文給出了限制只能輸入數(shù)字、限制只能輸入字母、限制只能輸入數(shù)字和字母3種腳本,需要的朋友可以參考下
    2015-02-02
  • JS根據(jù)生日算年齡的方法

    JS根據(jù)生日算年齡的方法

    這篇文章主要介紹了JS根據(jù)生日算年齡的方法,涉及javascript操作時(shí)間的相關(guān)技巧,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下
    2015-05-05
  • JavaScript中for of和for in的區(qū)別詳解

    JavaScript中for of和for in的區(qū)別詳解

    對(duì)于初學(xué)者,我們或許只知道無(wú)論是for of還是for in他們都有一個(gè)功能那就是遍歷,至于具體的細(xì)節(jié)或許我們不是很清楚,那么接下來(lái)我們就來(lái)詳細(xì)的區(qū)分一下for of和for in他們之間的不同點(diǎn)和相同點(diǎn),需要的朋友可以參考下
    2023-06-06
  • 百度地圖自定義控件分享

    百度地圖自定義控件分享

    本文給大家介紹的是如何使用百度地圖的自定義控件,附上示例,分享給大家,小伙伴們根據(jù)自己的需求稍微改動(dòng)下即可使用。
    2015-03-03
  • 淺談Javascript事件對(duì)象

    淺談Javascript事件對(duì)象

    本文主要介紹了Javascript事件對(duì)象的相關(guān)實(shí)例。具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • JS中Generator函數(shù)與async函數(shù)用法介紹

    JS中Generator函數(shù)與async函數(shù)用法介紹

    javascript中經(jīng)常會(huì)用到異步編程,在ES6之后我們使用的?Generator函數(shù)、async函數(shù)、promise都是我們異步編程的一大助力,這里我們主要講解Generator、async函數(shù),并且簡(jiǎn)介他們之間的一些聯(lián)系,本篇文章會(huì)帶著一些簡(jiǎn)易案例,方便大家理解使用
    2023-06-06
  • 使用JavaScript實(shí)現(xiàn)網(wǎng)頁(yè)秒表功能(含開始、暫停、繼續(xù)、重置功能)

    使用JavaScript實(shí)現(xiàn)網(wǎng)頁(yè)秒表功能(含開始、暫停、繼續(xù)、重置功能)

    這篇文章主要介紹了使用JavaScript實(shí)現(xiàn)網(wǎng)頁(yè)秒表(含開始、暫停、繼續(xù)、重置功能),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • js點(diǎn)擊按鈕實(shí)現(xiàn)帶遮罩層的彈出視頻效果

    js點(diǎn)擊按鈕實(shí)現(xiàn)帶遮罩層的彈出視頻效果

    這篇文章主要介紹了js點(diǎn)擊按鈕實(shí)現(xiàn)帶遮罩層的彈出視頻效果,需要的朋友可以參考下
    2015-12-12
  • 詳解基于Wepy開發(fā)小程序插件(推薦)

    詳解基于Wepy開發(fā)小程序插件(推薦)

    這篇文章主要介紹了詳解基于Wepy開發(fā)小程序插件(推薦),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • 快速排序 php與javascript的不同之處

    快速排序 php與javascript的不同之處

    告訴你一個(gè)排序算法,也許是最重要的是他們知道 - 快速排序,無(wú)論是在PHP和JavaScript實(shí)現(xiàn)的。雖然這兩種語(yǔ)言之間的代碼看起來(lái)相似,也有一些差異,這表明了語(yǔ)法知識(shí)的重要性!
    2011-02-02

最新評(píng)論