在with語句中跨frame的變數引用問題

2021-04-12 17:02:20 字數 935 閱讀 9844

在指令碼程式設計時使用with語句,可以大大的縮減使用多級物件引用**行的長度,這是jscript提供給我們的乙個syntax sugar。當然不使用with,使用臨時變數也可以達到同樣的效果。不過建立變數時起名確實不是一件很遐意的事,就連ma**高版本中也提供了乙個@@(以及@f和@b)來處理臨時標號的問題,看來大家都是比較懶得啦。

我寫的**其實不複雜,就是在乙個with中,作了很多另乙個frame中的變數引用和計算操作後,把結果賦值到本頁面函式的乙個區域性變數裡。事例**大概如下:

// ...

varhierarchies =;

with

(parent.frames['***frame'])

//開始使用hierarchies

這時hierarchies比較發瘋,不管怎麼弄裡面的值老是和想要得值有卻別,但又不是完全不對(後面會說為什麼會這樣,同時這是也嚴重迷惑我debug的乙個地方,被害慘了)。

為什麼會這樣?最後查出來原來是***frame裡也有乙個叫hierarchies的變數,而且也是陣列,放的內容居然也和我放的差不多,所以我前面說了為什麼會被迷惑了吧。而且還不止這點,由於之前還寫了乙個這種類似的with來跨頁面取資料,而且工作的很好,所以潛意識就覺得,with裡的那個hierarchies就是with外的那個hierarchies。我也不記得***frame中那個變數是不是我自己定義的了,反正debug時被鬱悶了好一陣子:(。

jscript手冊說with(objects) statements的作用是:為語句設定預設物件。不過在with內部對變數的作用範圍,它有個搜尋規則,就是優先做預設物件(objects)中的匹配。雖然有時覺得預設物件的作用域更"遠",就像跨frame這種情況。當預設物件引用中不能匹配,就匹配with之前被宣告過的變數。都不能匹配到就是undefined了。

本文只能老實收入"

debug中的滑鐵盧

"中了。

在with語句中跨frame的變數引用問題

在指令碼程式設計時使用with語句,可以大大的縮減使用多級物件引用 行的長度,這是jscript提供給我們的乙個syntax sugar。當然不使用with,使用臨時變數也可以達到同樣的效果。不過建立變數時起名確實不是一件很遐意的事,就連masm高版本中也提供了乙個 以及 f和 b 來處理臨時標號的...

DECODE在WHERE語句中的妙用

假設我們有兩個表,需要用row id連線,找出值相同或者不相同的資料 with temp1 as select 1 as row id,1 as cola from dual union all select 2 1 from dual union all select 3 null from du...

關於在case語句中變數的定義

case語句中宣告變數的各種情況分析 1,switch ch 這個是錯誤的,編譯器不會讓他通過編譯,理由是這樣的 int a 0 這個定義放在了case a 中,如果允許它順利通過編譯,會造成 不一致 考慮西面兩種情況 1 ch a 執行case a 分支,a順利的被初始化為0,執行完case a ...