為什麼盡量不要使用eval函式和with關鍵字

2021-08-28 08:23:15 字數 547 閱讀 2666

編譯過程:分詞/詞法分析;解析/語法分析;**生成

詞法作用域:定義在詞法階段的作用域

作用域:是一套規則,定義了引擎如何在作用域中通過識別符號名稱對變數進行查詢

作用域工作模型:詞法作用域、動態作用域

詞法化:編譯器工作的第一階段,即對**中的字元進行檢查。如果是有狀態的解析還會賦予單詞語義

1.效能問題:

①.js引擎會在編譯階段進行效能優化,其中部分優化依賴於對詞法作用域的靜態分析;

②.eval函式和with關鍵字會欺騙詞法作用域(eval動態修改,with憑空建立新的),從而導致詞法作用域中變數和函式的定義位置無法事先確定;

③.js引擎發現**中的eval和with後,會判別無法事先做優化,故直接放棄

2.嚴格模式下不允許使用:"use strict"

3.網路安全問題:

eval()會將接收的字串解析為js**,容易被惡意植入

(詳情不作展開,暫不了解)

盡量不要使用FindWindow

盡量不用 findwindow 最近發現 se6和 se5程序共存時視窗名稱一樣引起的 bug。原因是我們經常使用 findwindow 來獲得視窗控制代碼,然後進行訊息通訊,這樣呼叫簡單,但增加了不同模組之間的依賴性,比如同時有兩個程序時,就可能會找錯視窗。而如果靠人去維護這個視窗名稱,在程式工程...

oracle為什麼盡量不要使用外來鍵的最好理解

對於死鎖問題相信大家都是很頭疼的,為什麼不要使用外來鍵呢?最簡單的回答就是太容易產生死鎖了。經過個人的測試,我發現外來鍵刪除的時候,是按照表會話的順序執行的,也就是說如果只有乙個事務,只要子表刪掉外來鍵表的項,外來鍵表就可以刪除,但是如果同時有多個事務,這就難說了,具體舉例子如下 首先我們建立表並建...

盡量不要使用可變引數

在某些情況下我們希望函式引數的個數可以根據實際需要來確定,所以c語言中就提供了一種長度不確定的引數,形如 c 語言也繼承了這一語言特性。在採用ansi標準形式時,引數個數可變的函式的原型是 typefuncname typepara1,typepara2,這種形式至少需要乙個普通的形式引數,後面的省...