2015-04-30 30 views
0

我有一個部分是加載兩個腳本。第二個腳本在第一個腳本中調用一個函數......兩個腳本都使用「use strict」在頂部。當第二個腳本在第一個腳本中調用該函數時,出現「Uncaught ReferenceError 函數名稱未定義」。爲什麼'使用嚴格'導致函數未定義

起初我認爲它與腳本的順序有關,但經過一些調試後,我發現腳本按正確的順序執行。部分加載通過jquery異步調用,並且僅附加到當前視圖。另外,我可以在chrome的調試器中調用第一個腳本的函數,直到第二個文件被加載。

我有點瘋了,只是砍掉了一切,它仍然在發生。這裏就是我的工作......

腳本1

"use strict"; 

var firstScript = function() { 
    alert("first"); 
}; 

腳本2

"use strict"; 

var secondScript = function() { 
    alert("second"); 
}; 

Ajax調用

$.ajax({ 
    type: "post", 
    url: "/../SomeController/SomeAction", 
    success: function (content) { 
     $("#someDiv").html(content); 
    } 
}); 

部分

<script src="~/Some/Folder/Js/Script1.js"></script> 
<script src="~/Some/Folder/Js/Script2.js"></script> 

加載頁面後,我打開chrome調試器,並執行「firstScript()」或「secondScript()」引發相同的錯誤。

但是,如果我取出use strict;他們都工作的兩個文件。這裏到底發生了什麼?

+1

那真的是這些腳本文件的**完整內容嗎? – Pointy

+0

它們的順序是否正確?即你在包含之前調用'secondScript'嗎? –

+0

我正在使用它與asp.net獲取實際內容 – user2579064

回答

1

在閱讀Barmar的評論後深入一點。包含在部分中的任何標籤都通過jquery's globalEval函數進行評估,這當然使用eval()我的腳本具有"use strict";,而"use strict";的其中一個特徵是阻止eval()影響全局範圍,這就是我得到未定義函數的原因。

+0

Balmer!= Barmar ... –

+0

哇,我是怎麼做的 – user2579064

+0

誰知道,自動駕駛中的大腦打字最有可能:P –

相關問題