成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

盤點(diǎn)JavaScript中Eval函數(shù)的使用方法

開發(fā) 前端
本文基于JavaScript基礎(chǔ),介紹了 Eval函數(shù)的使用。調(diào)用 eval(code) 會(huì)運(yùn)行代碼字符串,并返回最后一條語句的結(jié)果。 要在全局作用域中 eval 代碼,可以使用 window.eval(code) 進(jìn)行替代。

[[411647]]

大家好,我是進(jìn)階學(xué)習(xí)者。

一、前言

內(nèi)建函數(shù) eval 函數(shù)允許執(zhí)行一個(gè)代碼字符串。

語法 :

  1. let result = eval(code); 

例 :

  1. let code = 'alert("Hello")'
  2. eval(code); // Hello 

運(yùn)行結(jié)果:

代碼字符串可能會(huì)比較長,包含換行符、函數(shù)聲明和變量等。

eval 的結(jié)果是最后一條語句的結(jié)果。

例:

  1. let value = eval('1+1'); 
  2. alert(value); // 2 
  3. let value = eval('let i = 0; ++i'); 
  4. alert(value); // 1 

運(yùn)行結(jié)果:

eval 內(nèi)的代碼在當(dāng)前詞法環(huán)境(lexical environment)中執(zhí)行,因此它能訪問外部變量:

  1. let a = 1; 
  2. function f() {  
  3.   let a = 2;  eval('alert(a)');  
  4.   // 2 
  5.   f(); 

運(yùn)行結(jié)果:

它也可以更改外部變量:

  1. let x = 5; 
  2. eval("x = 10"); 
  3. alert(x); // 10,值被更改了 

運(yùn)行結(jié)果:

嚴(yán)格模式下,eval 有屬于自己的詞法環(huán)境。因此不能從外部訪問在 eval 中聲明的函數(shù)和變量:

  1. // 提示:本教程所有可運(yùn)行的示例都默認(rèn)啟用了嚴(yán)格模式  
  2. 'use strict'eval("let x = 5; function f() {}"); 
  3. alert(typeof x); // undefined(沒有這個(gè)變量) 
  4. // 函數(shù) f 也不可從外部進(jìn)行訪問 

如果不啟用嚴(yán)格模式,eval 沒有屬于自己的詞法環(huán)境,因此可以從外部訪問變量 x 和函數(shù) f。

二、案例

Eval-計(jì)算器

創(chuàng)建一個(gè)計(jì)算器,提示用戶輸入一個(gè)算術(shù)表達(dá)式,并返回其計(jì)算結(jié)果。

讓使用 eval 來計(jì)算數(shù)學(xué)表達(dá)式:

  1. let expr = prompt("Type an arithmetic expression?"'23+2'); 
  2. alert( eval(expr) ); 

需要檢查表達(dá)式是否正確。只需要計(jì)算并返回結(jié)果。用戶可以輸入任意文本或代碼。

運(yùn)行結(jié)果:

三、使用 “eval”

在 eval 中使用外部局部變量也被認(rèn)為是一個(gè)壞的編程習(xí)慣,因?yàn)檫@會(huì)使代碼維護(hù)變得更加困難。

有兩種方法可以完全避免此類問題。

如果 \eval\ 中的代碼,+沒有使用外部變量,請(qǐng)以 window.\eval(...) 的形式調(diào)用 \eval\。

通過這種方式,該代碼便會(huì)在全局作用域內(nèi)執(zhí)行:

  1. let x = 1; 
  2.   let x = 5; 
  3.   window.eval('alert(x)'); // 1(全局變量) 

運(yùn)行結(jié)果:

如果 \eval\ 中的代碼需要訪問局部變量,可以使用 new Function 替代 \eval\,并將它們作為參數(shù)傳遞:

  1. let f = new Function('a''alert(a)'); 
  2. f(5); // 5 

運(yùn)行結(jié)果:

注:

new Function 從字符串創(chuàng)建一個(gè)函數(shù),并且也是在全局作用域中的。所以它無法訪問局部變量。

四、總結(jié)

本文基于JavaScript基礎(chǔ),介紹了 Eval函數(shù)的使用。調(diào)用 eval(code) 會(huì)運(yùn)行代碼字符串,并返回最后一條語句的結(jié)果。

要在全局作用域中 eval 代碼,可以使用 window.eval(code) 進(jìn)行替代。

 

通過案例的分析,進(jìn)行詳細(xì)的講解。在實(shí)際應(yīng)用中需要注意的點(diǎn),遇到的難點(diǎn),提供了詳細(xì)的解決方法。使用JavaScript語言,能夠讓讀者更好的理解。代碼很簡單,希望能夠幫助讀者更好的學(xué)習(xí)。

 

責(zé)任編輯:武曉燕 來源: 前端進(jìn)階學(xué)習(xí)交流
相關(guān)推薦

2024-09-03 13:32:11

JavaScriptEval函數(shù)

2024-07-11 14:05:28

JavaScript函數(shù)

2023-06-28 08:34:02

Bind()函數(shù)JavaScript

2010-10-08 14:27:25

JavascriptSplit

2021-08-31 10:01:04

JavaScript函數(shù)屬性

2011-07-12 17:18:23

PHPstrtotime

2022-03-29 09:15:55

Javascript函數(shù)屬性

2009-03-11 15:30:05

evalwithJavascript

2021-10-09 07:10:30

JavaScriptBigIn函數(shù)

2023-09-12 07:38:36

C++getline函數(shù)

2009-12-07 16:52:59

PHP函數(shù)getima

2009-11-30 17:43:54

PHP split()

2011-08-29 15:58:51

Lua函數(shù)

2011-04-13 15:44:12

SQL Server數(shù)函數(shù)

2009-11-26 19:05:04

PHP函數(shù)explod

2009-11-26 15:23:24

PHP函數(shù)ereg()

2009-08-28 17:01:43

C#構(gòu)造函數(shù)

2009-07-31 13:48:34

C# eval()函數(shù)

2009-11-16 16:54:00

PHP構(gòu)造函數(shù)

2009-12-01 19:02:20

PHP取整函數(shù)
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 亚州av| 日韩精彩视频 | 欧美日韩一区二区在线观看 | 国产视频一区在线观看 | 91精品国产乱码久久久久久久 | 久久久黑人 | 2022精品国偷自产免费观看 | 亚洲色片网站 | 久久免费看| 日本久久精品视频 | 午夜在线 | 91国内精品久久 | 国产精品入口麻豆www | 午夜电影网 | 久久激情网 | 亚洲高清av在线 | 精品国产乱码久久久久久丨区2区 | 在线免费观看毛片 | 日韩欧美在线观看 | 日韩精品中文字幕在线 | 在线中文字幕第一页 | 毛片在线免费 | 亚洲国产成人精品女人久久久 | 中文字幕av在线 | 亚洲日本欧美日韩高观看 | 国产亚洲精品久久19p | 亚洲成色777777在线观看影院 | 亚洲精品乱码久久久久久黑人 | 亚洲三级在线 | 国产人成精品一区二区三 | 久久麻豆精品 | 97高清国语自产拍 | 亚洲美女一区 | 久久久久久免费免费 | 巨大荫蒂视频欧美另类大 | 毛片的网址 | 91精品在线播放 | 中文在线一区二区 | 亚洲成人久久久 | 97精品国产一区二区三区 | 久久999|