2011-01-21 8 views
1
<script type="text/javascript"> 
     $(document).ready(function() { 
      var SOME_ID= 234; 

     }); 

    </script> 
<script type="text/javascript" src="<%= HtmlExtension.ScriptFile("~/somefile.js") %>"></script> 

.jsファイルは単にSOME_ID値を使用しますが、SOME_IDが定義されていないというエラーが表示されます。私はjs変数を宣言しましたが、jsファイルにインクルードできませんでしたか?

これは理論的には機能しませんか?

+2

ドキュメント準備の外であなたのVARを移動した場合、予想通り、それは動作しますか? – Lance

答えて

1

あなたの変数は、あなたの無名関数の範囲内で定義されています。準備ができているハンドラの外に移動してください。

6

あなたは匿名関数内でローカル変数を宣言しました。グローバル変数にしたい場合は、代わりに​​を使用するか、匿名関数から移動してください。

例えば、次のいずれか

<script type="text/javascript"> 
    $(document).ready(function() { 
     window.SOME_ID= 234; 

    }); 
</script> 

または

<script type="text/javascript"> 
    var SOME_ID= 234; 
    $(document).ready(function() { 

    }); 
</script> 

いずれかの方法でグローバル変数がの性質であるため、外部ファイルは、SOME_ID(修飾されていない)、またはwindow.SOME_IDいずれかとしてそれにアクセスすることができますグローバルオブジェクト(ブラウザではwindow)。

+0

注:ウィンドウの使用はブラウザでは安全ですが、必ずしもjavascriptのグローバルコンテキストではありません。 – Hemlock

+0

@Hemlock: "グローバル変数オブジェクト"という意味です。 ;-)はい、それは絶対に真です。ブラウザ以外の環境では、グローバル変数オブジェクトは完全に匿名であるか、別の名前を持つ可能性があります。これはかなり明らかにブラウザ環境ですが、それでも言及する価値があります。 –

2

あなたはこの関数内でのみアクセス可能な無名関数の中でローカル変数を宣言しました。あなたは外でそれを宣言する必要があります:

var SOME_ID = 0; 
$(function() { 
    SOME_ID = 234; 
}); 
1

この変数は、関数式(FE)にスコープreadyメソッドに渡された - それは、この範囲外で使用することはできません。

あなたは他のスクリプトがアクセスできるようにしたい場合はvarがグローバルにする必要があります。

var SOME_ID; 
$(document).ready(function() { 
    SOME_ID = 234; 
}); 
関連する問題