2012-01-12 61 views
1

我正在使用jsio(jslibs - http://code.google.com/p/jslibs/wiki/jsio),並且正在運行Safari中的一個錯誤。 意外的令牌'='Safari上的JS Bug:意外的令牌'='

問題在於這部分代碼。

this.debugPath = function(path) { return path; } 

// IE6 won't return an anonymous function from eval, so use the function constructor instead 
var rawEval = (typeof eval('(function(){})') == 'undefined') 
      ? function(src, path) { return (new Function('return ' + src))(); } 
      : function(src, path) { var src = src + '\n//@ sourceURL=' + path; return window.eval(src); }; 

// provide an eval with reasonable debugging 
this.eval = function(code, path, origCode) { 
...................... 

該問題似乎是在rawEval被分配的行。評論它導致錯誤轉移到其他地方。有沒有人遇到過這個問題?

幫助?

謝謝。

+0

'function(src,path){var src = src ...}'可能是越野車。你使用'src'來聲明一個局部變量,但它不是局部變量。你最終會覆蓋同名的形式參數。 – 2012-01-13 05:22:25

+0

順便說一句,'new Function(...)'在全局範圍內綁定,而在ES3下'window.eval'綁定在調用範圍內,所以這兩個不等價。解決IE6 eval問題的一種方法是在您正在評估的表達式文本前添加字符串「0」。 – 2012-01-13 05:24:28

+0

@MikeSamuel:你的意思是以下嗎?試過但沒有工作。 '變種rawEval =函數(SRC,路徑){' \t'返回的eval( 「0」 + SRC + '\ n // @ sourceURL =' +路徑);'' };' – Navneet 2012-01-15 03:06:14

回答

0

如果有人(包括我)再次遇到這個問題,這是供將來參考的。

Safari在我的情況下拋出的錯誤是虛假的,或者至少是相當模棱兩可的。

我在我的一個庫中定義了一個類。而且我不想存儲對該類對象的句柄/引用。所以,我做了這樣的事情:

function reply(...) { 
    new ClassName(.....).onHide = bind(...); 
    .......... 
} 

當我將其更改爲以下內容時,Safari停止抱怨。

function reply(...) { 
    var dg = new ClassName(......); 
    dg.onHide = bind(...); 
    .............. 
} 

聲明一個新的對象並確定其成員屬性(或功能)中的一個可能是一個問題。