這幾天在升級(jí)自己的MVVM 框架,遇到很多小問(wèn)題,就在這里統(tǒng)一解決了.
with 語(yǔ)法
在代碼中,要執(zhí)行這么一個(gè)函數(shù)
function computeExpression(exp, scope) { try { with (scope) { return eval(exp); } } catch (e) { console.error('ERROR', e); }}
要求在scope 作用域中執(zhí)行,什么意思???
比如
scope = {a:10,b:5};exp = a*b;
要求計(jì)算結(jié)果為15,這種情況,常規(guī)情況下要使用 with語(yǔ)法。
但是:
js的解釋器需要檢查with塊中的變量是否屬于with包含的對(duì)象,這將使with語(yǔ)句執(zhí)行速度大大下降,并且導(dǎo)致js語(yǔ)句很難被優(yōu)化。
在嚴(yán)格模式中,with語(yǔ)法是被禁用的。
而我使用ES6語(yǔ)法來(lái)編寫(xiě)這個(gè)庫(kù)的,默認(rèn)啟用了嚴(yán)格模式了。所以不得已,自己模擬了一個(gè)with 的語(yǔ)法。
先看代碼
function replaceWith(scopeName, exp) { exp = " " + exp.trim(); let quickRegex = /([\s\+\-\*\/%&\|\^!\*~]\s*?)([a-zA-Z_$][a-zA-Z_$0-9]*?)/g; exp = exp.replace(quickRegex,